Boucle do loop problème d'incrémentation?
camanagro
-
camanagro -
camanagro -
Bonjour,
Je suis débutante et je suis en train de créer une macro qui parcourt un tableur et fait une comparaison de 2 dates d'application pour des valeur de cellule adjacente (MA) identique. Si la différence entre ces 2 dates est inférieur à 15 alors j'ai une MsgBox qui me le dit et me donne des cellules adjacentes.
Mon problème est tout d'abord dans le fait que la message box s'affiche (sans les données) meme si la différence entre mes 2 dates est supérieur à 15, en ensuite dans le fait que la comparaison s'arrete à la première occurence (ne va pas jusqu'au bout du tableau)
ça fait un moment que je galère dessus donc si vous avez une proposition rapide, je suis preneuse!
Merci beaucoup!!
a = a + 2
Else
a = a + 1
End If
Loop Until ActiveCell.Offset(a + 1, 0).Value = " "</code>
Je suis débutante et je suis en train de créer une macro qui parcourt un tableur et fait une comparaison de 2 dates d'application pour des valeur de cellule adjacente (MA) identique. Si la différence entre ces 2 dates est inférieur à 15 alors j'ai une MsgBox qui me le dit et me donne des cellules adjacentes.
Mon problème est tout d'abord dans le fait que la message box s'affiche (sans les données) meme si la différence entre mes 2 dates est supérieur à 15, en ensuite dans le fait que la comparaison s'arrete à la première occurence (ne va pas jusqu'au bout du tableau)
ça fait un moment que je galère dessus donc si vous avez une proposition rapide, je suis preneuse!
Merci beaucoup!!
Sub nvleselection() 'travaille sur cette nouvelle selection* Workbooks("BDD_MA.xlsm").Sheets("travailMA").Activate Dim a As Integer a = 0 Range("Y2").Select Do If ActiveCell.Offset(a, 0) = ActiveCell.Offset(a + 1, 0) Then If ActiveCell.Offset(a, -2) - ActiveCell.Offset(a + 1, -2) < 15 And ActiveCell.Offset(a, -2) - ActiveCell.Offset(a + 1, -2) > -15 Then MsgBox "La MA " & ActiveCell.Offset(a, 0) & " est appliquée 2 fois sur une période de moins de 15 jours. Produits utilisés: " & ActiveCell.Offset(a, -5) & " et " & ActiveCell.Offset(a + 1, -5) & "." End <code>If
a = a + 2
Else
a = a + 1
End If
Loop Until ActiveCell.Offset(a + 1, 0).Value = " "</code>
A voir également:
- Boucle do loop problème d'incrémentation?
- Bash do while ✓ - Forum Shell
- My people do - Télécharger - Organisation
- Excel copier formule sans incrémentation ✓ - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Do not turn off target traduction - Forum Samsung
2 réponses
bonjour
RQ1. Il y a un espace entre les guillemets ici qui me semble de trop (je suppose que tu as voulu mettre ="vide")
Loop Until ActiveCell.Offset(a + 1, 0).Value = " "
RQ2. On peut simplifier un peu ton code
1. utilisation de With ActiveCell .... End With
2. (x-y>-15) et (x-y<15) équivaut à |x-y|<15
RQ3. il y a peut être d'autres coquilles
fais un suivi des variables en exécutant pas à pas ta procédure, il te suffit de
1. mettre u point d'arrêt devant la ligne a=0 (clic dans la marge un gros point doit apparaitre)
2. exécuter la procédure (F8 pour passer à l'instruction suivante)
3. cliquer sur une variable pour voir son état
bonne journée
RQ1. Il y a un espace entre les guillemets ici qui me semble de trop (je suppose que tu as voulu mettre ="vide")
Loop Until ActiveCell.Offset(a + 1, 0).Value = " "
RQ2. On peut simplifier un peu ton code
1. utilisation de With ActiveCell .... End With
2. (x-y>-15) et (x-y<15) équivaut à |x-y|<15
Sub nvleselection() Dim a As Integer 'travaille sur cette nouvelle selection* Workbooks("BDD_MA.xlsm").Sheets("travailMA").Activate a = 0 Range("Y2").Select With ActiveCell Do If .Offset(a, 0) = .Offset(a + 1, 0) Then If Abs(.Offset(a, -2) - .Offset(a + 1, -2) < 15) Then MsgBox "La MA " & .Offset(a, 0) & " est appliquée 2 fois sur une période de moins de 15 jours. Produits utilisés: " & .Offset(a, -5) & " et " & .Offset(a + 1, -5) & ".", vbOKOnly End If a = a + 2 Else a = a + 1 End If Loop Until .Offset(a + 1, 0).Value = "" End With End Sub
RQ3. il y a peut être d'autres coquilles
fais un suivi des variables en exécutant pas à pas ta procédure, il te suffit de
1. mettre u point d'arrêt devant la ligne a=0 (clic dans la marge un gros point doit apparaitre)
2. exécuter la procédure (F8 pour passer à l'instruction suivante)
3. cliquer sur une variable pour voir son état
bonne journée