Comparaison tableau / colonne

Résolu/Fermé
Pierau666 Messages postés 9 Date d'inscription mercredi 13 juillet 2016 Statut Membre Dernière intervention 17 juillet 2016 - Modifié par Pierau666 le 13/07/2016 à 20:34
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 - 17 juil. 2016 à 17:57
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
A voir également:

2 réponses

ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
13 juil. 2016 à 21:23
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
0
Pierau666 Messages postés 9 Date d'inscription mercredi 13 juillet 2016 Statut Membre Dernière intervention 17 juillet 2016
13 juil. 2016 à 23:17
Merci beaucoup, il marche parfaitement.

Par contre, pourquoi le mien ne fonctionnait pas ?

Merci d'avance
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > Pierau666 Messages postés 9 Date d'inscription mercredi 13 juillet 2016 Statut Membre Dernière intervention 17 juillet 2016
Modifié par michel_m le 17/07/2016 à 08:09
Bonjour CCm


pourquoi dans le "find" passer par une cellule "set obj" alors que
find(......).row
te donne la ligne directement ?
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
17 juil. 2016 à 17:57
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
0