XL 2010 Compléter ce code pour recopie de ligne si 2 critères sont respectés

fb62840

XLDnaute Impliqué
Bonjour,

Pourriez-vous me proposer un code qui me permettrait de recopier la ligne d'une feuille (Feuil2) à la feuillle 1 sur la ligne 2 avec ces conditions :

sur la feuille 1 :
si la colonne h contient une valeur
Rechercher sur Feuil2 la ligne qui contient dans la colonne H la même valeur et la copier-coller sur la feuille 1 en A2

Si la colonne h ne contient aucune valeur
Si la colonne I contient une valeur et si la colonne K contient également obligatoirement une valeur
Recherchercher sur Feuil2 la ligne qui contient les mêmes valeurs en colonnes I et K et la copier-coller sur la feuille 1 en A2

Merci beaucoup

j'ai essayé plusieurs formulation mais ça ne marche pas :

exemple
Code:
With Sheets("Feuil2")
        If Sheets("Feuille1").Range("H2") <> "" Then
            For i = .Range("H65536").End(xlUp).Row To 2 Step -1
                If Range("H" & i).Value = Sheets("Feuille1").Range("H2").Value Then
                    .Rows(i).Copy Destination:=Sheets("Feuille1").Range("A2")
               End If
            Next i
        End If
        If Sheets("Feuille1").Range("i2") <>"" And Sheets("Feuille1).Range("K2") <>"" Then
          For i = .Range("H65536").End(xlUp).Row To 2 Step -1
           If Range("i" & i).Value = Sheets("Feuille1").Range("i2").Value  And Range("K" & i).Value = _ Sheets("Feuille1").Range("k2").ValueThen
                .Rows(i).Copy Destination:=Sheets("Feuille1").Range("A2")
        End If
            Next i
        End If
    End With
 

Lone-wolf

XLDnaute Barbatruc
Re

Alors il faut modifier Utilise dans ta page perso, sinon ça porte à confusion. Em mettant rows(i), tu va rechercher toute les cellules qui ont la valeur h, donc tu va copier par exemple de H1 à H10. Si tu veux que la macro recherche une ligne à la fois, il faut supprimer la boucle for i. Mais pour mieux, t'aider, met le fichier avec quelques lignes seulement.
 
Dernière édition:

fb62840

XLDnaute Impliqué
Bonjour,

J'en suis là, les choses avancent mais je ne suis pas au bout, je n'arrive pas à vérifier la présence de 2 critères sur la même ligne, un peu d'aide serait bienvenu

Code:
Sub MASU()
Dim nbre As Integer, Lig As Integer, Cptr As Integer
Dim criter1 As String, criter2 As String, criter3 As String
Dim i As Long
Dim nome As String, noment As String
Dim L As Integer

Application.ScreenUpdating = False

criter1 = Range("H2").Value
criter2 = Range("F2").Value
criter3 = Range("I2").Value

If criter1 <> "" Then
With Sheets("Feuil2")
nbre = Application.WorksheetFunction.CountIf(Sheets("Feuil2").Range("H2:H1000"), criter1)
If nbre = 1 Then
L = Worksheets("Feuil2").Columns("H:H").Find(criter1, lookat:=xlWhole).Row
Worksheets("Feuil2").Rows(L & ":" & L).Copy Destination:=Worksheets("Feuille1").Cells(2, 1)
Worksheets("Feuille1").Activate
Range("A2").Select
Exit Sub
End If
End With
End If

If criter2 <> "" And criter3 <> "" Then

With Sheets("Feuil2")
nbre = Application.WorksheetFunction.CountIf(Sheets("Feuil2").Range("H2:H1000"), criter2)
If nbre = 0 Then
MsgBox ("Le critère 2 n'a pas été trouvé !"), vbCritical
Worksheets("Feuille1").Activate
Range("A2").Select
Exit Sub
End If

nbre = Application.WorksheetFunction.CountIf(Sheets("Feuil2").Range("i2:i1000"), criter3)
If nbre = 0 Then
MsgBox ("Le critère 3 n'a pas été trouvé !"), vbCritical
Worksheets("Feuille1").Activate
Range("A2").Select
Exit Sub
End If

If nbre <> 1 Then
"C'est ici que je n'arrive pas à écrire le code qui me permettrait de trouver la ligne qui contiendrait les 2 critères"
End If

End If

End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re

Regarde dans le classeur si c'est ce que tu cherche à faire. Pour l'instant il y a juste le critère de la colonne h, qui se trouve en A2. Clique sur le bouton pour voir le résultat. Et j'aimerais savoir quand est-ce que tu va mettre ton classeur. C'est quand même pas penible, non? Après 531 messages tu devrais le savoir. En plus, de 2 tu passe à 3 critères et dans le prochain message, il y aura combien de critères??? :rolleyes:
 

Pièces jointes

  • Classeur1.xlsm
    20.5 KB · Affichages: 36
Dernière édition:

fb62840

XLDnaute Impliqué
Bonjour,
Merci pour votre aide.

Navré de causer des problèmes et de la tension.

Je comprends le principe du code présent dans votre macro.
Comment modifier la ligne :

Code:
cel.Copy Sheets(1).Range("a65536").End(xlUp)(2)
Pour obtenir le renvoie de la ligne sur la ligne 2 de la feuille 1 ?

Remarque votre code vérifie ensuite les critères 2 et 3 indépendamment mais il faudrait les traiter ensemble
Il faut que les 2 critères soient présents pour recopier la ligne sur la ligne 2 de la feuille 1

POur essayer d'être clair :
si le critère 1 est présent, pas besoin de lancer la vérification des critères 2 et 3 pour afficher la ligne sur la feuille 1
Mais, si le critère 1 est absent, il faut vérifier si critère 2 et critère 3 sont présents et,
si c'est le cas alors on peut afficher la ligne où on les trouve sur la feuille 1
 

Lone-wolf

XLDnaute Barbatruc
Bonjour fb

1) Tu veux vérifier ligne par ligne ou toutes les lignes en même temps? 2) Tu veux transcrire 1 seul ligne en A2 oubien toutes les lignes, une fois que la vérification est faite?

ICI TU DIS: Si la colonne h ne contient aucune valeur
Si la colonne I contient une valeur et si la colonne K contient également obligatoirement une valeur
Recherchercher sur Feuil2 la ligne qui contient les mêmes valeurs en colonnes I et K et la copier-coller sur la feuille 1 en A2

ET ICI TU DIS:
criter1 = Range("H2").Value
criter2 = Range("F2").Value
criter3 = Range("I2").Value
Critères de la feuille 1

Encore une fois, si vraiment tu veux être claire. Fait un classeur avec le résultat que tu veux obtenir, sinon on vas y passer 1 mois sans se comprendre. C'est bien beau de causer, tu veux encore que je te mette la cuillère dans la bouche???
 
Dernière édition:

fb62840

XLDnaute Impliqué
Bonjour,

Merci pour vos efforts.

Si je saisie Code1 voici ce que je souhaite voir se produire :
Puisque l'on trouve plusieurs le Code1 en colonne H sur Feuil2
Une boîte devrait alerter l'utilisateur et lui imposer la saisie en I2 et K2 (le critère en H n'étant pas suffisant)

Si je saisie NC13 en i2 et Tx2 en K2 alors il faut renvoyer à partir de H2 sur Feuil1 :
Code1 en h2
NC13 en i2
Txt1 en J2
Tx2 en K2

Voir le fichier joint avec mes explications
 

Pièces jointes

  • Copie de Classeur1-v2 (2).xlsm
    22.6 KB · Affichages: 29

Discussions similaires

Réponses
5
Affichages
195
Réponses
4
Affichages
213

Statistiques des forums

Discussions
312 305
Messages
2 087 077
Membres
103 455
dernier inscrit
saramachado