Probleme dans VBA

C'est tellement géniale ca marche super bien !

Par contre ca serait possible de m'expliqur ce que représente

s = c.Cells(2 - c.Row, 1)

nm = c.Cells(1, 2 - c.Column)

[nmpnm2]

.Cells(i, 1)

[mln].Cells(1, s * 3).Offset(i) = 1

tous les 2 etc ....

Désolé de t'avoir fait répéter ta question mais je sors de clinique aujoud'hui, après un séjour que j'ai pu limiter à 27 heures...

Un peu de calcul : s récupère le numéro de semaine (en ligne 1) et nm le nom en colonne 1. On récupère ces données à partir d'une cellule c, la cellule testée.

Si on prend comme référence la cellule c et qu'on adresse une cellule à partir de c en utilisant Cells :

la ligne de celle-ci est alors 1, les lignes qui précèdent en remontant vont être 0, -1, -2... et les lignes qui suivent 2, 3, 4...

pareil pour les colonnes, sa colonne est 1, les colonnes précédentes 0, -1, -2...., les colonnes suivantes 2, 3, 4...

Tu peux vérifier que pour toute cellule de la feuille : 2-c.Row renvoie la ligne 1 de la feuille relativement à c, et que : 2-c.Column renvoie la colonne 1 de la feuille. Ensuite la valeur s cherchée étant sur la même colonne que c, la valeur colonne relative à c sera donc 1, et de même la valeur nm étant sur la même ligne que c, la valeur ligne afférente par rapport à c sera 1.

Ainsi, si c est la cellule D3, soit ligne 3 colonne 4 :

s = c.Cells(2 - c.Row, 1) => c.Cells(2-3,1) => c.Cells(-1,1) soit c étant c.Cells(1,1) le décalage par rapport à c est : -1 - 1=-2 et par rapport à 3 cela renvoie 1 (3-2) comme ligne de la feuille. le décalage colonne étant 0 la colonne est la même. Donc pour D3 on va pointer D1 pour trouver s

nm = c.Cells(1, 2 - c.Column) => même chose : c.Cells(1,2-4) => c.Cells(1,-2) =>décalage : -2 - 1 =-3, la colonne -3 par rapport à D est A. La ligne étant ici la même on pointe donc A3 pour trouver nm.

Tu peux faire le calcul pour toute cellule de la feuille tu auras le même résultat.

Ensuite on va chercher la position de nm sur la plage nmpnm2 (qui est la plage nom sur l'autre feuille, qui commence en colonne A en A3) on parcourt la plage avec une boucle et lorsque laplage.Cells(i, 1) = nm on sort de la boucle, on a trouvé nm et i en indique le numéro de ligne dans ladite plage, soit : 1 pour la ligne 3 de la feuille, 2 pour la 4, etc.

mln est aussi une plage nommée de cette feuille, celle qui ligne 2 comporte les mentions motif lieu numéro... Cette plage débute en H et chaque lot de mentions, qui correspond à 1 semaine, occupe 3 colonnes. Le numéro 1 dont on va tester la présence se trouve dans la 3e colonne du groupe, c'est à dire dans une colonne de cette plage ayant le rang 3 pour semaine 1, 6 pour semaine 2, 9 pour semaine 3, etc.

En faisant : [mln].Cells(1, s * 3) on pointe sur la ligne 2 (de la feuille) la colonne susceptible de contenir ce 1. i étant le rang du nom cherché à partir de la ligne 3 (de la feuille) nous fournit simultanément le décalage ligne à appliquer à la cellule qu'on vient de pointer en ligne 2 pour tomber sur la cellule à tester pour le 1 !

Et on teste donc : If [mln].Cells(1, s * 3).Offset(i) = 1 Then => la fonction renvoie alors True.

Cordialement.

Rechercher des sujets similaires à "probleme vba"