Comparaison tableau / colonne
Résolu
Pierau666
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Comparaison tableau / colonne
- Tableau word - Guide
- Déplacer colonne excel - Guide
- Tableau ascii - Guide
- Trier colonne excel - Guide
- Comparaison million milliard - Accueil - Technologies
2 réponses
Bonjour
A tester
Cdlmnt
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
Par contre, pourquoi le mien ne fonctionnait pas ?
Merci d'avance
pourquoi dans le "find" passer par une cellule "set obj" alors que
find(......).row
te donne la ligne directement ?