Récupérer n° de ligne si correspondance entre valeurs

jeanfrancisco

XLDnaute Nouveau
Bonjour,

Voilà mon problème, je suis débutant en vba et je dois trouver une macro ou une fonction me permettant la manip suivante:

j'ai 3 feuilles
1 contenant les données X
1 contenant les données Y
et la dernière me servira a afficher les résultats (feuille Z)

Deux colones par feuille
odre (ab001; ab002...)
date de passage

je dois comparer cellule par cellule la valeur de la colonne A (feuilleX) à la l'ensemble de la colone A (feuille Y)
une fois le matching fait j'ai besoin de séléctionner la cellule de la feuille Y correspondante. puis trouver le n° de ligne (toujours de la feuille Y)

le but est d'afficher par la suite sur la feuille Z uniquement les lignes de la feuille Y où mon ordre est = a la feuille X et ou la date de la feuille Y est < à la feuille X

je bloque carrément, j'ai essayé avec la formule équiv, mais je ne sais pas comment récupérer le N° de ligne correspondant au match

Merci d'avance,

JeanFrancisco
 

VDAVID

XLDnaute Impliqué
Re : Récupérer n° de ligne si correspondance entre valeurs

Salut JeanFrancisco et bienvenue sur le forum :)

Pourrais-tu mettre un fichier exemple sans données confidentielles, avec le résultat que tu souhaiterais obtenir?
Ce serait plus simple et comme on dit, un fichier exemple vaut mille lignes de post ;)

Bonne journée !
 

VDAVID

XLDnaute Impliqué
Re : Récupérer n° de ligne si correspondance entre valeurs

Re,

Voilà, par macro un moyen de faire ce que tu recherches (Si j'ai bien compris)

N'hésite pas si tu as des questions sur le code ou pour adapter le fichier ;)

Pour voir voir le code Alt + F11 ==> Module "Résultat"

Bonne fin d'après midi!
 

Pièces jointes

  • Copie de Classeur1.xlsm
    20.7 KB · Affichages: 28
  • Copie de Classeur1.xlsm
    20.7 KB · Affichages: 35
  • Copie de Classeur1.xlsm
    20.7 KB · Affichages: 34

jeanfrancisco

XLDnaute Nouveau
Re : Récupérer n° de ligne si correspondance entre valeurs

Merci c'est parfait !

Comment je peux faire apparaitre plus que les deux cellules comparées ?
j'ai admettons 4 colones avec des infos, et en l'état actuel 2 cellules comparées et 2 cellules affichées, comment afficher le reste de la ligne ?
 

jeanfrancisco

XLDnaute Nouveau
Re : Récupérer n° de ligne si correspondance entre valeurs

Voici la version 2 de mon fichier, j'ai essayé de prendre les cellules attenantes avec ActiveCell.CurrentRegion mais le paste ne fonctionne pas, et je ne sais pas comment récupérer la valeur des cellules attenantes aux cellules conservées dans "comparaison"
 

Pièces jointes

  • test 2 .xlsm
    34.7 KB · Affichages: 24
  • test 2 .xlsm
    34.7 KB · Affichages: 27
  • test 2 .xlsm
    34.7 KB · Affichages: 30

VDAVID

XLDnaute Impliqué
Re : Récupérer n° de ligne si correspondance entre valeurs

Salut Jeanfrancisco,

Voilà comment adapter:

Dans ta première feuille, c'est la ligne 2 qui détermine le nombre de colonne à importer dans la feuille finale (Comparaison).
La 3ème boucle va chercher la dernière cellule non vide de ta ligne 2 de la feuille 70820 et renvoie le numéro de colonne.

Le code:

Code:
Dim i As Long, z As Integer, h As Long, m As Long
Dim Ws As Worksheet, Ws1 As Worksheet, Ws2 As Worksheet


Sub Résultat()
    
    
    Application.ScreenUpdating = False
    
    Set Ws = Sheets("70820")
    Set Ws1 = Sheets("70830")
    Set Ws2 = Sheets("comparaison")
    
    
    With Ws
        
        'Ligne de départ dans la feuille résultat
        z = 2
        
        For i = 2 To .Range("A65536").End(xlUp).Row
        
         
               For h = 2 To Ws1.Range("A65536").End(xlUp).Row
            
                If .Range("A" & i).Value = Ws1.Range("A" & h).Value Then
                    
                    Ws2.Range("A" & z).Value = .Range("A" & i).Value
                    
                    For m = 3 To .Cells(2, 287).End(xlToLeft).Column
                    
                        Ws2.Cells(z, m).Value = Ws1.Cells(h, m).Value
                    
                    Next m
                    
                    
                    z = z + 1
                    
                End If
        
          Next h
            
        
        Next i
    
    End With
    
    Application.ScreenUpdating = True

End Sub

N'hésite pas si tu as encore du mal à adapter !
Bonne soirée
 

jeanfrancisco

XLDnaute Nouveau
Re : Récupérer n° de ligne si correspondance entre valeurs

merci, mais j'ai eu pas mal de mal a l'adapter par contre j'ai vu ce code, qui du coup me simplifie la tache.
par contre je seche pour ne conserver que les lignes où la date de la feuille 70820 est inférieure à la date de la feuille
70830.

j'ai essayé avec 2 boucles for et le signe > mais impossible de faire un truc correct, je me retrouve avec plus de 200 lignes (en doublon)


Dim i As Long, z As Integer, h As Long
Dim Ws As Worksheet, Ws1 As Worksheet, Ws2 As Worksheet


Sub Résultat()


Application.ScreenUpdating = False

Set Ws = Sheets("70820")
Set Ws1 = Sheets("70830")
Set Ws2 = Sheets("comparaison")


With Ws

'Ligne de départ dans la feuille résultat
z = 2

For i = 2 To .Range("A65536").End(xlUp).Row


For h = 2 To Ws1.Range("A65536").End(xlUp).Row

If .Range("A" & i).Value = Ws1.Range("A" & h).Value Then

Ws1.Range("A" & h & ":I" & h).Copy Destination:=Ws2.Range("A" & z)

z = z + 1

End If

Next h


Next i

End With

Application.ScreenUpdating = True

End Sub
 

VDAVID

XLDnaute Impliqué
Re : Récupérer n° de ligne si correspondance entre valeurs

Bonjour,

Peut-être comme ceci:
(A condition que la date soit en colonne B et sous le bon format)

Code:
Dim i As Long, z As Integer, h As Long, m As Long
Dim Ws As Worksheet, Ws1 As Worksheet, Ws2 As Worksheet


Sub Résultat()
   
   
    Application.ScreenUpdating = False
   
    Set Ws = Sheets("70820")
    Set Ws1 = Sheets("70830")
    Set Ws2 = Sheets("comparaison")
   
   
    With Ws
       
        'Ligne de départ dans la feuille résultat
        z = 2
       
        For i = 2 To .Range("A65536").End(xlUp).Row
       
         
               For h = 2 To Ws1.Range("A65536").End(xlUp).Row
           
  If .Range("A" & i).Value = Ws1.Range("A" & h).Value And .Range("B" & i).Value < Ws1.Range("B" & h).Value Then
                   
                    Ws2.Range("A" & z).Value = .Range("A" & i).Value
                   
                    For m = 3 To .Cells(2, 287).End(xlToLeft).Column
                   
                        Ws2.Cells(z, m).Value = Ws1.Cells(h, m).Value
                   
                    Next m
                   
                   
                    z = z + 1
                   
                End If
       
          Next h
           
       
        Next i
   
    End With
   
    Application.ScreenUpdating = True

End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz