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

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!!

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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. camanagro
     
    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