Balayage de feuilles Excel (occurences mot) [Résolu] - Forum Programmation

A voir également:Balayage de feuilles excel (occurences mot)Protection feuilles excel avec mot de passe - Forum - Excel Déprotéger feuilles Excel suite oubli de mot de passe ✓ - Forum - Excel Lien entre un mot et une autre feuille Excel ✓ - Forum - Excel Mot de passe sur feuille Excel - Forum - Excel Mot de passe Feuille Excel 2007 - Forum - Excel

Bonjour,
Je bosse sur un planning d'occupation de notre espace multimédia de Bibliothèque
J'ai donc mon tableau excel avec une feuille par jour de la semaine
Les noms des abonnés dans des colonnes

J'aimerai construire une macro qui balaye mes 5 feuilles, qui compte combien de fois une personne est venue dans la semaine et dans la case à coté du nom inscrit combien de fois elle est venue depuis le début de la semaine. (étant donné qu'on limite à 2 heures par semaine ! )

Par exemple on est mercredi dans la case Durand il y aura inscrit DURAND / 12 (car il est venu 8 fois mardi et 4 fois mercredi)

Le balayage et le marquage des feuille peut-être déclenché manuellement.

J'ai cherché avec NB ...si, array etc... mais je n'ai rien trouvé.

Ca parait toujours simple !!! Enfin, merci à tous.

Forum

A voir également:Balayage de feuilles excel (occurences mot)Protection feuilles excel avec mot de passe - Forum - Excel Déprotéger feuilles Excel suite oubli de mot de passe ✓ - Forum - Excel Lien entre un mot et une autre feuille Excel ✓ - Forum - Excel Mot de passe sur feuille Excel - Forum - Excel Mot de passe Feuille Excel 2007 - Forum - Excel

Web: www.shapebootstrap.net

5 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonjour

qui compte combien de fois une personne est venue dans la semaine et dans la case à coté du nom inscrit combien de fois elle est venue depuis le début de la semain
dans la case Durand il y aura inscrit DURAND / 12

Ta demande me parait un peu embrouillée par l'exemple, mais comme tu parles de la case à côté, j'étais parti sur une fonction personnalisée à mettre dans un module VBA.

Public Function occup(nom As String) As Integer  For i = 1 To Sheets.Count  l = 1: c = 1  If Sheets(i).Cells(l, c) = nom Then occup = occup + 1  Do      Set sel = Sheets(i).Cells.Find(What:=nom, After:=Sheets(i).Cells(l, c), _          LookIn:=xlValues, LookAt:=xlWhole, _          SearchOrder:=xlByColumns, _          SearchDirection:=xlNext, MatchCase:=False)      If sel Is Nothing Then Exit Do      If sel.Row <= l Then Exit Do      occup = occup + 1: l = sel.Row: c = sel.Column  Loop  Next i  End Function

Donc, si ton nom est en A1, dans la cellule à côté du nom (B1), tu mets la formule : =occup(A1)
et tu n'as rien à lancer car la formule se met à jour comme toute fonction.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,
Génial, malgré ma question confuse mon problème est résolu !
C'est exactement ça. Merci à toi.
Quand j'aurai terminé ce planning je viendrai le poster ici.
Je pense qu'il pourrait servir à d'autres.

Il pourra sans doute être amélioré.

Question : ou es-tu allé chercher les instructions "LookIn, xlWhole, ect..." et que signifie ce souligné en fin de lignes ?
Qu'est-ce que tu utilise comme documentation ? (tout de tête)

Au fait ça ne recalcule pas tout seul chez moi, peut-être ne l'ais-je pas déclarée au bon endroit.

J'ai appris le basic il y a bien longtemps (Qbasic etc...) et ce qui me trouble en visual c'est que les noms des variables ressemblent aux instructions ! Mais bon j'aurai peut-être le déclic un de ces jours.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonjour


Question : ou es-tu allé chercher les instructions "LookIn, xlWhole, ect..."

Rien d'extraordinaire, c'est la syntaxe de "find" : LookIn te permet de rechercher les valeurs , les formules,etc
xlWhole recherche la totalité de la cellule sinon tu peux mettre xlpart mais dans ton cas c'est pas souhaitable.

et que signifie ce souligné en fin de lignes ?
Là c'est tout bêtement une continuation de ligne lorsque l'instruction (telle find) est très longue à écrire, _
cela permet de continuer en passant à la ligne comme je vient de faire !


Qu'est-ce que tu utilise comme documentation ?


essentiellement celle d'excel car c'est la plus facile d'accès. Il faut un certain temps pour apprendre à s'en servir mais je trouve qu'elle est assez bien faite.

(tout de tête) non les syntaxes sont trop complexes pour tout retenir mais il y a aussi la copie du déjà fait : quand on se copie soi-même, ce n'est pas pénalisable ?


Au fait ça ne recalcule pas tout seul chez moi, peut-être ne l'ais-je pas déclarée au bon endroit.

Tu as tout à fait raison il manque une instruction pour que cela fonctionne mais en changeant en permanence pour les essais je ne l'ai pas vu

Public Function occup(nom As String) As Integer  Application.Volatile  For i = 1 To Sheets.Count  

En rajoutant cette ligne, cela va recalculer à chaque modification : rien n'est parfait !
En définissant la fonction "Volatile" Excel recalcule la fonction comme les autres calculs sinon il faut modifier la donnée pour qu'il y ait recalcul.

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Salut,
Je m'apprétais à appeler au secours puis j'ai testé ceci qui n'est qu'une variation de ce que tu as fait :

Public Function compt(nom As String) As Integer
compt = 0
If nom = "" Then GoTo fin
Application.Volatile
For I = 1 To 5 <----mon bon vieux Basic !!!
For l = 11 To 38
For c = 3 To 14 Step 2

If Sheets(I).Cells(l, c) = nom Then compt = compt + 1 <---- ça c'est de toi, merci !
Next c
Next l
Next I

fin:
End Function

ça marche impec pour mon tableau j'ai mis des frontières pour ne pas balayer toutes les cellules et un step pour éviter certaines cases.

A+.sagtiv à gmail.com

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonjour

C'est parfait, c'est le but de ces échanges d'idées pour que chacun les intègre afin de progresser dans son domaine.

Les goto n'étant pas à mon avis très utiles ni très élégants en langage objet, tu peux très bien écrire :
If nom = "" Then exit sub

For I = 1 To 5 <----mon bon vieux Basic !!!
Le fait de mettre "sheets.count" revient au même bien sûr dans ton cas
sauf que si tu décides d'ouvrir le samedi, tu n'as rien à changer.
C'était l'intérêt d'utiliser le nombre de feuilles pour éviter la maintenance.

Le raisonnement du VBA est assez différent du "bon vieux Basic" car on gère des événements et le raisonnement n'est plus linéaire en imposant à l'utilisateur un mode d'emploi pour lui laisser le soin de décider son propre cheminement.

Bonne continuation et @+

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed