Problème sur boucle

Bonjour,

Je veux faire une boucle pour que à la i ième ligne il copie des données, à la j ième ligne il copie des données, etc..

Mais ma boucle s'arrete à la première ligne trouvé correspondant à mes conditions. Je ne vois pas comment je peux faire pour passer aux lignes suivantes afin de copier les données à l'endroit voulu

Mon fichier :

8boucle.xlsm (25.88 Ko)

Bonjour,

Il y a plusieurs problèmes :

  • Dans le cas où il y a plusieurs chargements pour une même immatriculation dans la même journée, la première ligne à respecter un temps de pesée inférieur à un temps de chargement + 3h est le premier chargement de la journée. Il faut donc ajouter une condition pour vérifier que l'horaire de pesée est SUPÉRIEUR à l'horaire de chargement ET INFÉRIEUR à l'horaire de chargement + 3h
  • Le critère des 3h couvre parfois plusieurs chargements, je l'ai réduit à 2h (à voir si ça fonctionne toujours)
  • Certaines lignes de la feuille 2 ne remplissent pas les critères car les heures contiennent aussi la date (lignes 7 à 9 de mémoire)
  • J'ai réécrit le code pour gagner en clarté :
  • -> C'est bien d'utiliser des instructions "With Sheets("Truc")...End With", encore faut-il en faire usage par la suite...
  • -> Suppression des variables inutilisées (immatriculation, identification, LigMax)
  • -> Regroupement des instructions pour éviter la redondance des "With...End With"

Voilà ce que je te propose :

Sub Programme()

    Dim LigMax1 As Long, LigMax2 As Long
    Dim WS2 As Worksheet

    Set WS2 = Worksheets("Feuil2")
    With Sheets("Feuil1")
        LigMax1 = .Range("A" & Rows.Count).End(xlUp).Row
        LigMax2 = WS2.Range("C" & Rows.Count).End(xlUp).Row
        For i = 3 To LigMax1
            For j = 3 To LigMax2
                'Si même immatriculation, même date, et horaire pesée dans les 2 heures
                If WS2.Cells(j, 2) = .Cells(i, 3) And WS2.Cells(j, 3) = .Cells(i, 1) And WS2.Cells(j, 4) > .Cells(i, 2) And WS2.Cells(j, 4) < .Cells(i, 2) + 2 / 24 Then
                    .Cells(i, 5) = WS2.Cells(j, 1) 'Copie Num Tag sur le suivi
                    .Cells(i, 7) = WS2.Cells(j, 6) 'Copie Poids Brut sur le suivi
                    .Cells(i, 8) = WS2.Cells(j, 5) 'Copie Tare sur suivi
                    .Cells(i, 6) = WS2.Cells(j, 4) 'Copie Heure de passage sur la bascule sur suivi
                    Exit For 'Abrège la boucle
                ElseIf j = LigMax2 Then MsgBox "Aucune correspondance pour la ligne " & i
                End If
            Next j
        Next i
    End With

End Sub

Bonjour Pedro22,

Merci pour la réecriture du code. Celui-ci est bien plus propre

Je pensais me servir des autres variables, mais j'en n'ai pas eu l'utilité.

Une chose que je ne comprends pas à l'exécution de la macro, ca marche très bien pour la journée du 28/03.

Mais pour la journée du 29/03, pourquoi seulement le premier camion est traité ? Pour l'immat EG749G, il y a bien une correspondance pourtant.

Renvoie ton fichier avec le nouveau code, celui sur lequel ça ne fonctionne pas.

Chez moi ça fonctionnait, mais j'ai du corriger au préalable les heures qui contenaient aussi la date, en feuille 2 (exemple : valeur affichée = 12:00:00 mais contenu de la cellule = 29/03/2019 12:00:00).

Bien vu ! Comment tu as pu voir qu'il y contenait les dates dans les cellules ?

Une fois le contenu changé, ca marche

Bien vu ! Comment tu as pu voir qu'il y contenait les dates dans les cellules ?

Une fois le contenu changé, ca marche

En me creusant un peu la tête sur l'origine possible du problème ! J'avais déjà signalé ce point dans mon post précédent.

PS :

- Certaines lignes de la feuille 2 ne remplissent pas les critères car les heures contiennent aussi la date (lignes 7 à 9 de mémoire)

Effectivement je n'ai pas pris en compte correctement ce commentaire, je m'en excuse

Merci beaucoup pour ton aide

- Certaines lignes de la feuille 2 ne remplissent pas les critères car les heures contiennent aussi la date (lignes 7 à 9 de mémoire)

Effectivement je n'ai pas pris en compte correctement ce commentaire, je m'en excuse

Aucun soucis, les commentaires étaient denses ! Bonne continuation et merci d'avoir passé le sujet en "résolu".

Rechercher des sujets similaires à "probleme boucle"