Comparaison tableau / colonne [Résolu/Fermé]

Signaler
Messages postés
9
Date d'inscription
mercredi 13 juillet 2016
Statut
Membre
Dernière intervention
17 juillet 2016
-
Messages postés
9763
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 mai 2021
-
Bonjour,

J'ai un fichier Excel contenant deux feuilles. La première, nommée "base", contient des données dans les colonnes B, C et D. La seconde feuille, nommée "data", contient seulement des données dans la colonne B. Toutes les données de la colonne B de la feuille "data" sont contenues dans la colonne B de la feuille "base", cette dernière comportant en plus des lignes supplémentaires.

Je cherche à réaliser un code qui permettrait de comparer les données des colonnes B des deux feuilles et copier le contenu des colonnes C et D de la feuilles "base" sur la feuille "data" seulement quand le contenu des deux colonnes B est identique.

J'ai récupéré et modifié le code suivant afin d'y parvenir, mais une erreur "L'indice n'appartient pas à la selection (T_ref(Cptr))" sur la ligne 27 survient.

Je ne comprends pas le problème, j'ai l'impression qu'il ne trouve pas mon tableau T_ref...

Si un oeil plus expert que le mien pouvait y regarder, j'en serai très reconnaissant :)

Fichier ci-joint: https://www.cjoint.com/c/FGnsnSTRkoq

Bonne soirée



Option Explicit
Option Base 1

Sub ccm_maj()
Dim Derlig As Integer, T_ref, T_maj
Dim Cptr As Integer, Lig As Integer, Col As Byte, Nbre As Integer

    Application.ScreenUpdating = False 'fige l'écran: confort et rapidité
    
    'mémorisation des modifs
    With Sheets("base")
        Derlig = .Columns("B").Find(what:="*", searchdirection:=xlPrevious).Row
        T_ref = .Range("B2:B" & Derlig)
        T_maj = .Range("C2:D" & Derlig)
        If Derlig = 2 Then
            Nbre = 1
        Else
            Nbre = UBound(T_ref)
        End If
    End With
    'ouverture de la datebase

    With Sheets("data")
        For Cptr = 1 To Nbre
        
        On Error GoTo inconnu
                Lig = Columns("B").Find(T_ref(Cptr), xlValue).Row
           
            For Col = 2 To 3
                .Cells(Lig, Col) = T_maj(Cptr, Col - 1)
            Next
        Next
    End With
    'sauvegarde et fermeture  export à voir
    
Exit Sub
'gestionnaire erreurs
inconnu:
    MsgBox " Reférence " & T_ref(Cptr) & " inconnue dans Export-Eureka !", vbCritical
End Sub

2 réponses

Messages postés
9763
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 mai 2021
2 106
Bonjour

A tester

Sub ccm_maj()
Dim Derlig As Long, T_ref As Range, T_maj As Range, obj As Object
Dim Cptr As Long, Lig As Long, Col As Byte, Nbre As Long
Application.ScreenUpdating = False 'fige l'écran: confort et rapidité
'mémorisation des modifs
With Sheets("base")
Derlig = .Columns("B").Find(what:="*", searchdirection:=xlPrevious).Row
Set T_ref = .Range("B2:B" & Derlig)
Set T_maj = .Range("C2:D" & Derlig)
If Derlig = 2 Then
Nbre = 1
Else
Nbre = T_ref.Cells.Count
End If
End With
'ouverture de la datebase
With Sheets("data")
For Cptr = 1 To Nbre
Set obj = .Columns("B").Find(T_ref.Cells(Cptr, 1))
If Not obj Is Nothing Then
Lig = obj.Row
For Col = 1 To 2
.Cells(Lig, 2 + Col) = T_maj.Cells(Cptr, Col)
Next
End If
Next
End With
'sauvegarde et fermeture export à voir
Exit Sub
'gestionnaire erreurs
inconnu:
MsgBox " Reférence " & T_ref(Cptr, 1) & " inconnue dans Export-Eureka !", vbCritical
End Sub

Cdlmnt
Messages postés
9
Date d'inscription
mercredi 13 juillet 2016
Statut
Membre
Dernière intervention
17 juillet 2016

Merci beaucoup, il marche parfaitement.

Par contre, pourquoi le mien ne fonctionnait pas ?

Merci d'avance
Messages postés
16445
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mai 2021
3 170 >
Messages postés
9
Date d'inscription
mercredi 13 juillet 2016
Statut
Membre
Dernière intervention
17 juillet 2016

Bonjour CCm


pourquoi dans le "find" passer par une cellule "set obj" alors que
find(......).row
te donne la ligne directement ?
Messages postés
9763
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 mai 2021
2 106
Salut Michel

Comme il vaut mieux tester si la valeur a été trouvée, ça permet (de mon point de vue du moins ) d'écrire ça "plus proprement"

Bon dimanche