Comparaison données

Bonjour à tous,

Nouveau sur VBA, j'ai des difficultés à transcrire en code les opérations que je souhaite effectuer.

En PJ un fichier exemple.

Sur une feuille 1 j'ai un premier tableau structuré dans lequel 2 colonnes m'intéressent : Note, Structure1.

Sur une feuille 2, un deuxième tableau structuré contenant l'équivalent de la colonne Structure1 mélangé, nommée Structure2.

Je souhaite dans l'ordre :

- Lister les tableaux qui existent dans le classeur,

- Avoir une boite de dialogue qui demande à l'utilisateur les tableaux, et les colonnes à comparer dans ces tableaux (sous forme de listes dans lesquelles l'utilisateur peut aller choisir les tableaux et colonnes concernés).

- Vérifier pour chaque valeur dans tableau2 qu'elle existe dans tableau1,

- Pour chaque valeur concernée dans tableau2 :

- Déterminer la Note associée (même ligne du tableau1, colonne Note),

- Trouver la première note de niveau inférieur,

- Trouver l'équivalent de cette note dans la colonne Structure1,

- Copier cette dernière valeur à la droite de la valeur initiale de Structure2.

Exemple :

Colonne à comparer : tableau2 colonne Structure2 - tableau 1 colonne Structure1

Valeur d'exemple dans tableau2 : 444

L'équivalent existe dans tableau1.

Note de la valeur 444 dans tableau1 : 5

Note de niveau inférieur : 4

Valeur associée dans tableau1 : A

Copier la valeur A à droite de 444 dans tableau2.

Faire la même chose pour toutes les valeurs de tableau2.

Merci d'avance pour votre aide.

12classeur-test.xlsm (15.50 Ko)

Bonjour,

Personne n'a d'idée ?

Merci d'avance

Bonjour,

En fait le résultat des comparaison doit être mis où et comment dans votre fichier ?
Je pense que Power Query pourrait faire l'affaire...

Crdlt

Bonjour Dan,

Merci pour ce premier retour. Le résultat de la comparaison doit apparaitre dans une colonne supplémentaire à droite de la colonne composant2 dans le fichier que je joins ici.

Je n'ai pas à dispo Power Query et il me faut quelque chose de reproductible sur différents classeurs sans le faire à la main.

J'ai fait un premier code qui a plusieurs soucis :

- Les inputbox ne prennent pas mon texte quand je demande la sélection des feuilles et des colonnes à comparer.

- La compairson fonctionne une fois sur 2. Par ailleurs, si je rajoute des colonnes dans mon Tableau1 entre les colonnes note et composant1 (parce que la place des colonnes peut varier d'un classeur à l'autre dans mon utilisation finale), la comparaison ne fonctionne plus.

Ci dessous le code :

Sub compareTableaux()

    ' Variables pour stocker les tableaux et colonnes sélectionnés par l'utilisateur
    Dim feuille1 As Worksheet
    Dim feuille2 As Worksheet
    Dim colonne1 As Range
    Dim colonne2 As Range

    ' Variables pour parcourir les données des tableaux
    Dim valeur1 As Variant
    Dim valeur2 As Variant
    Dim i As Long
    Dim j As Long
    Dim note_inf As Long
    Dim composant_inf As String

    ' Demande à l'utilisateur de sélectionner les tableaux et les colonnes à comparer
    On Error Resume Next
    Set feuille1 = Application.InputBox("Sélectionnez la feuille contenant la colonne composant1", Type:=8)
    If feuille1 Is Nothing Then
        MsgBox "Opération annulée ou feuille invalide sélectionnée. Veuillez recommencer."
        Exit Sub
    End If

    Set colonne1 = Application.InputBox("Sélectionnez la colonne composant1", Type:=8)
    If colonne1 Is Nothing Then
        MsgBox "Opération annulée ou colonne invalide sélectionnée. Veuillez recommencer."
        Exit Sub
    End If

    Set feuille2 = Application.InputBox("Sélectionnez la feuille contenant la colonne composant2", Type:=8)
    If feuille2 Is Nothing Then
        MsgBox "Opération annulée ou feuille invalide sélectionnée. Veuillez recommencer."
        Exit Sub
    End If

    Set colonne2 = Application.InputBox("Sélectionnez la colonne composant2", Type:=8)
    If colonne2 Is Nothing Then
        MsgBox "Opération annulée ou colonne invalide sélectionnée. Veuillez recommencer."
        Exit Sub
    End If

    ' Ajoute une colonne "Composant_inf" à droite de la colonne2
    feuille2.Columns(colonne2.Column + 1).Insert Shift:=xlToRight
    feuille2.Cells(1, colonne2.Column + 1).Value = "Composant_inf"

    ' Parcourt toutes les valeurs de la colonne2
    For i = 2 To feuille2.Cells(Rows.Count, colonne2.Column).End(xlUp).Row
        valeur2 = feuille2.Cells(i, colonne2.Column).Value

        ' Initialise la valeur de Composant_inf à NA par défaut
        feuille2.Cells(i, colonne2.Column + 1).Value = "NA"

        ' Parcourt toutes les valeurs de la colonne1
        For j = 2 To feuille1.Cells(Rows.Count, colonne1.Column).End(xlUp).Row
            valeur1 = feuille1.Cells(j, colonne1.Column).Value

            ' Si la valeur de composant2 existe dans la colonne composant1, détermine la note associée et la composante inférieure
            If valeur2 = valeur1 Then
                note_inf = 0
                composant_inf = ""

                ' Parcourt toutes les valeurs de la colonne1 jusqu'à trouver la note inférieure la plus proche
                For k = j - 1 To 2 Step -1
                    If feuille1.Cells(k, colonne1.Column - 1).Value < feuille1.Cells(j, colonne1.Column - 1).Value Then
                        note_inf = feuille1.Cells(k, colonne1.Column - 1).Value
                        composant_inf = feuille1.Cells(k, colonne1.Column).Value
                    Else
                        Exit For
                    End If
                Next k

                ' Écrit la composante inférieure dans la colonne Composant_inf
                feuille2.Cells(i, colonne2.Column + 1).Value = composant_inf
                Exit For
            End If
        Next j
    Next i

    MsgBox "La comparaison est terminée."

End Sub

Ci dessous un exemple de ce que ça doit donner :

Feuil1 :

notecomposant1
1Toto
2Tutu
2Tata
3Titi
4Tyty
4Tete

Feuil2 :

composant2Composant_inf
TataToto
TitiTata
TeteTiti
TktkNA
TutuToto

Merci d'avance pour vos retours.

4test-macro.xlsm (24.42 Ko)
Rechercher des sujets similaires à "comparaison donnees"