Recherche sur colonne et correspondance

Bonjour,

Tout est détaillé sur le fichier.

7forum.xlsm (22.34 Ko)

Rien ne se passe à l'exécution de mon programme :

Sub Programme()

    Dim Immatriculation As Range
    Dim Identification As Range
    Dim LigMax1, LigMax2 As Long

    With Worksheets("Feuil1")
        LigMax1 = .Range("F" & Rows.Count).End(xlUp).Row
        Set Immatriculation1 = .Range("C3:C" & LigMax1)
    End With

    With Worksheets("Feuil2")
        LigMax = .Range("J" & Rows.Count).End(xlUp).Row
        Set Immatriculation = .Range("B2:B" & LigMax)
    End With

    With Sheets("Feuil1")
        For i = 3 To LigMax1
            For j = 2 To LigMax
                If Worksheets("Feuil2").Cells(i, 2).Value = Worksheets("Feuil1").Cells(j, 3).Value Then
                    Worksheets("Feuil2").Cells(i, 1).Copy
                    Worksheets("Feuil1").Cells(i, 5).Paste
                End If
            Next j
        Next i
    End With
End Sub

Je pense que pleins de choses ne vont pas dans mon prgramme

J'ai besoin de votre aide svp

Bonjour,

tu prend les colonnes F et J pour connaitre la dernière ligne renseignée?

ces colonnes sont vide....

  With Worksheets("Feuil1")
        LigMax1 = .Range("F" & Rows.Count).End(xlUp).Row
        Set Immatriculation1 = .Range("C3:C" & LigMax1)
    End With

    With Worksheets("Feuil2")
        LigMax = .Range("J" & Rows.Count).End(xlUp).Row
        Set Immatriculation = .Range("B2:B" & LigMax)
    End With

Effectivement, j'ai simplifié le fichier en supprimant des colonnes et j'ai oublié de modifier les deux colonnes..

With Worksheets("Feuil1")
        LigMax1 = .Range("A" & Rows.Count).End(xlUp).Row
        Set Immatriculation1 = .Range("C3:C" & LigMax1)
    End With

    With Worksheets("Feuil2")
        LigMax = .Range("C" & Rows.Count).End(xlUp).Row
        Set Immatriculation = .Range("B2:B" & LigMax)
    End With

Maintenant j'ai une erreur sur la ligne

  Worksheets("Feuil1").Cells(i, 5).Paste

Pour la ligne i, je veux copier la cellule de la Feuil2 en colonne A sur la Feuil1 en colonne E

re,

à la place d'un copier/coller

essai:

Worksheets("Feuil1").Cells(i, 5) = Worksheets("Feuil2").Cells(i, 1).Value

Yes merci !

re,

à tester,

Oui ca marche ! Tu regarderas sur le fichier que tu as transmis que le résultat n'est pas dans le bon ordre.

J'ai juste mis "j" pour la Feuil2 à la place de "i".

Worksheets("Feuil1").Cells(i, 5) = Worksheets("Feuil2").Cells(j, 1).Value 'Copie Num Tag sur le suivi

J'ai rajouter les autres données à copier.

Worksheets("Feuil1").Cells(i, 5) = Worksheets("Feuil2").Cells(j, 1).Value 'Copie Num Tag sur le suivi
Worksheets("Feuil1").Cells(i, 7) = Worksheets("Feuil2").Cells(j, 6).Value 'Copie Poids Brut sur le suivi
Worksheets("Feuil1").Cells(i, 8) = Worksheets("Feuil2").Cells(j, 5).Value 'Copie Tare sur suivi
Worksheets("Feuil1").Cells(i, 6) = Worksheets("Feuil2").Cells(j, 4).Value 'Copie Heure de passage sur la bascule sur suivi

Mais j'ai remarqué qu'il me copie deux fois la même ligne.

Je rajoute donc des conditions dans mon IF:

 If Worksheets("Feuil2").Cells(j, 2).Value = Worksheets("Feuil1").Cells(i, 3).Value And Worksheets("Feuil2").Cells(j, 3).Value = Worksheets("Feuil1").Cells(i, 1).Value And TROISIEME CONDITION Then

Pour ma troisième condition sur les heures, je vais faire ca sous forme d'exemple pour être plus mieux compris.

Par exemple si Worksheets("Feuil1").Cells(i, 2).Value = 7:17

Alors Worksheets("Feuil2").Cells(j, 4).Value doit être compris entre 7:17 et 10:17.

Worksheets("Feuil1").Cells(i, 2).Value < 3h + Worksheets("Feuil2").Cells(j, 4).Value

Mais je ne sais pas comment le mettre sous forme de code.

Tu as une idée ?

re,

là j'ai pas trop compris ce que tu veux faire...

C'est assez compliqué à expliquer par message. Je vais essayé d'être plus clair.

Je veux ajouter une condition sur "l'heure de chargement" et "l'heure de passage sur la bascule"

Si l'heure de chargement est inférieure à l'heure de passage sur la bascule + 3H ==> c'est bon, ma condition est remplie

Mais si l'heure de passage sur la bascule est trop élevée (au dela des 3H) par rapport a l'heure de chargement , ce n'est pas bon, donc je ne copie pas la ligne.

En gros c'est juste mettre cette ligne correctement en vba, j'ai aucune idée comment ajouté 3h a la cellule de la Feuil2

Worksheets("Feuil1").Cells(i, 2).Value < 3h + Worksheets("Feuil2").Cells(j, 4).Value

Je t'avouerai que je me perds aussi dans l'explication

Est-ce que tu as compris avec cette explication ?

re,

peux tu mettre un 3ème tableau sur le fichier pour montrer le résultat attendu ?

Bonjour,

Tu trouveras le resulat obtenu et celui attendu sur la première feuille.

3forum.xlsm (25.75 Ko)

Un grand merci pour le temps que tu m'as consacré

Sur cette ligne de code : (qui n'est pas correct)

Worksheets("Feuil1").Cells(i, 2).Value < 3h + Worksheets("Feuil2").Cells(j, 4).Value

Comment je peux sommer 3h à ma cellule "Worksheets("Feuil2").Cells(j, 4).Value" ? Qui est une cellule avec un horaire

re,

même en ajoutant la condition >= c'est toujours l'heure la plus grande qui est transféré puisque la dernière de la boucle,

regarde le tableau fait en colonne Q:S

Sub Programme()
Dim Immatriculation As Range
Dim Identification As Range
Dim LigMax1, LigMax2 As Long
Dim dth1 As Double, dth2 As Double, imm1 As String, imm2 As String

With Worksheets("Feuil1")
    LigMax1 = .Range("A" & Rows.Count).End(xlUp).Row
    Set Immatriculation1 = .Range("C3:C" & LigMax1)
End With

With Worksheets("Feuil2")
    LigMax = .Range("C" & Rows.Count).End(xlUp).Row
    Set Immatriculation = .Range("B2:B" & LigMax)
End With

With Sheets("Feuil1")
    For i = 3 To LigMax1
        For j = 3 To LigMax
            dth1 = Worksheets("Feuil1").Cells(i, 1).Value + Worksheets("Feuil1").Cells(i, 2).Value
            imm1 = Worksheets("Feuil1").Cells(i, 3).Value

            dth2 = Worksheets("Feuil2").Cells(j, 3).Value + Worksheets("Feuil2").Cells(j, 4).Value
            imm2 = Worksheets("Feuil2").Cells(j, 2).Value

            If imm1 = imm2 And dth2 >= dth1 Then

                Worksheets("Feuil1").Cells(i, 5) = Worksheets("Feuil2").Cells(j, 1).Value 'Copie Num Tag sur le suivi
                Worksheets("Feuil1").Cells(i, 7) = Worksheets("Feuil2").Cells(j, 6).Value 'Copie Poids Brut sur le suivi
                Worksheets("Feuil1").Cells(i, 8) = Worksheets("Feuil2").Cells(j, 5).Value 'Copie Tare sur suivi
                Worksheets("Feuil1").Cells(i, 6) = Worksheets("Feuil2").Cells(j, 4).Value 'Copie Heure de passage sur la bascule sur suivi
            End If
        Next j
    Next i
End With
End Sub

Je vois où tu veux en venir avec le tableau. Mais j'ai bien peur que ca va être long à faire sur mon fichier original.

Mince alors..je pensais qu'avec toutes les conditions réunies ca allait marcher.

J'ai réussi à écrire en VBA ce que je voulais précedemment :

Worksheets("Feuil2").Cells(j, 4).Value > (TimeValue(#3:00:00 AM#) + Worksheets("Feuil1").Cells(i, 2).Value)

Alors ce n'est pas possible avec la boucle de dire que si la première valeur de la boucle valide les conditions, la copier ? Puis passer à la suivante ?

EDIT : Chez moi c'est la première valuer qu'il garde et non la dernière de la boucle.

0forum.xlsm (26.10 Ko)

re

si la première valeur de la boucle valide les conditions, la copier ? Puis passer à la suivante ?

le problème est que si la 2ème heure est valide, la 3ème l'est aussi...

forcement puisque le tableau en Feuil2 est classé en ordre croissant sur les heures.

Rechercher des sujets similaires à "recherche colonne correspondance"