Boucle do loop problème d'incrémentation?

Fermé
camanagro - 21 févr. 2013 à 16:29
 camanagro - 23 févr. 2013 à 13:02
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!!


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>

2 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 22/02/2013 à 11:03
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

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
0
Je te remercie.
'Javais finalement réussi à trouver quelques erreurs, dont l'espace mentionné et des .Value manquants...Je vais essayer de simplifier la marcro avec tes conseils.
Bon week end!
0