Probleme VB Excel

kikmimaru Messages postés 2 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012 - 14 mai 2012 à 11:14
kikmimaru Messages postés 2 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012 - 15 mai 2012 à 09:42
Bonjour tout le monde,
Voila le petit débutant que je suis rencontre un problème sur une macro que j'essaie en vain d'écrire.
Je m'explique:
J'ai deux classeur "source 1" et "source 2"
Dans le classeur "source 1" j'ai une liste d'éléments sur plusieurs colonnes.
Dans le second classeur "source 2" j'ai une seconde liste avec d'autres éléments dont certains sont identiques à ceux du premier classeur, par exemple j'aurais une colonne "vêtements" que je retrouverais dans les deux classeurs.
Seul problème c'est que pour deux colonnes identiques les cellules ne sont pas rangées dans le même ordre.
Ce que je cherche à faire c'est de comparer chacune des cellules de la colonne "vêtements" du classeur "source 1" avec les cellules de la colonne "vêtements" du classeur "source 2" et que quand il y a correspondance je puisse copier dans le classeur "source 1" la cellule se trouvant sur le même ligne que celle comparé mais dans une colonne différente et coller sa valeur dans le classeur "source 2" dans une cellule se trouvant aussi sur la même ligne que la cellule comparé de ce classeur mais dans une colonne différente.
Exemple:
La macro se lance
Elle compare la première cellule de la colonne A du classeur "source 1" avec toute les cellules de la colonne B du classeur "source 2".
Si elle trouve une correspondance avec des cellules du classeur "source 2" (A la ligne 10 par exemple) alors elle copie la valeur de la cellule se trouvant en colonne E a la ligne 10 également.
Une fois copié elle colle cette valeur dans une cellule du classeur "source 1" se trouvant sur la même ligne (ici ligne 1 pour l'exemple) mais dans la colonne D par exemple.
Une fois cela fait, on passe a la cellule de la ligne 2 dans le classeur "source 2" et on compare cette cellule avec toutes les cellules de la colonne B du classeur "source 2" et ainsi de suite.

Voici le code que j'ai commencé à faire:

Dim i As Integer

Private Sub Nom de la fonction()


i = 0
For i = 1 To 10000

If
Workbooks("R:\chemin du classeur "source 1"\source 1.xlsx").Sheets("Feuille concerné").Range("A" & i).Value = Workbooks("R:\chemin du classeur "source 2"\source 2.xlsx"").Sheets("Feuille concerné").Range("B" & i).Value
Then
Workbooks("R:\chemin du classeur "source 1"\source 1.xlsx").Sheets("Feuille concerné").Range("D" & i).Value = Workbooks("R:\chemin du classeur "source 2"\source 2.xlsx").Sheets("Feuille concerné").Range("E" & i).Value

Next

i = i + 1

End Sub

Seulement ici avec ma variable i les deux colonnes doivent être rangées identiquement alors que moi mes cellules de mes deux colonnes ne sont pas automatiquement rangées pareil.
Et pour faire plus simple ce code ne marche pas donc il doit peut être y avoir un problème d'activation de classeur ou je ne sais quoi ^^

j’espère avoir été le plus clair possible.

2 réponses

El_Titof Messages postés 17 Date d'inscription dimanche 2 novembre 2003 Statut Membre Dernière intervention 19 mai 2012
14 mai 2012 à 21:05
Bonjour,

tu aurais pu mettre un vrai code car là ton code n'est même pas exécutable...
0
kikmimaru Messages postés 2 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 09:42
Bonjour,
Dsl le code était juste en attendant que je finalise un autre code qui est le suivant:

Option Explicit

Sub Macro1()
Dim Cellule As Range
Dim Excel2 As Workbook
Dim LastLine As Integer
Dim Tableau1() As Variant
Dim Tableau2() As Variant
Dim I, J As Integer

' On cherche le numéro de la dernière ligne utilisée dans la colonne F
LastLine = Cells(Rows.Count, "B").End(xlUp).Row

' On redimensionne les 2 tableaux de façon dynamique
ReDim Tableau1(LastLine)
' On a besoin de stocker les valeurs de 4 colonnes
ReDim Tableau2(LastLine)

' On charge le tableau avec les valeurs de la colonne F
For I = 1 To LastLine
Tableau1(I) = Range("B" & Trim(Str(I)))
Next I

' On ouvre le fichier excel2.xls et on lui donne le focus
Workbooks.Open Filename:="R:\Affaire\8-Etudes\Données de sortie\Documents d'étude\CFO\Documents de travail\NF\IMPLANT CFo COMPIL_Ind-R_LegendeLocaux.xls"
Set Excel2 = ActiveWorkbook
Excel2.Activate

' On scanne la colonne C avec les valeurs contenues dans le tableau
For I = 1 To LastLine
Set Cellule = ActiveSheet.Range("Pointeur").Find(Tableau1(I), Lookat:=xlWhole)
Tableau2(I) = Cellule.Offset(0, -2).Value

Next I

'On referme le classeur excel2.xls dont on n'a plus besoin
Excel2.Close

' On recopie le contenu du tableau dans les colonnes Y, AA, AC, AD
For I = 1 To LastLine
Range("D" & Trim(Str(I))) = Tableau2(I)

Next I
End Sub

Par contre la j'ai un probleme quand j'execute au niveau de la ligne :

For I = 1 To LastLine
Set Cellule = ActiveSheet.Range("Pointeur").Find(Tableau1(I), Lookat:=xlWhole)
Tableau2(I) = Cellule.Offset(0, -2).Value

Next I

Il me met l'erreur d’exécution 91 variable objet ou variable de bloc With non définie.
Apparemment ce serait la variable cellule qui bug...

PS: J'ai trouvé ce code sur http://forums.futura-sciences.com/logiciel-software-open-source/505186-excel-comparaison-de-cellules-copie-de-donnees-entre-2-classeurs.html
0
Rejoignez-nous