Bonjour à tous
Dans une macro : j’ai besoin de choisir un classeur (déjà ouverts), une feuille et une colonne et les affecter à des variables par des inputBox.
A = classeur N°1
B = classeur N° 2
C = feuille X
D = feuille Y
E = colonne A de la feuille X du classeur 1
F = colonne B de la feuille Y du classeur 2
G = colonne F de la feuille Y du classeur 2
H = colonne C de la feuille X du classeur 1
But :
Avec 2 classeurs déjà ouverts, comportant chacun plusieurs feuilles.
Je désirerais choisir le nom de mes 2 classeurs (il peut y en avoirs d’autres ouverts aussi) comparer la feuille 3 du classeur 1 avec la feuille 4 du classeur 2 et, si une référence de la colonne A de la feuille 3 est trouvée, dans la colonne B de la feuille 4 : copier les données de la cellule F de la feuille 4 du classeur 2 (se trouvant sur la même ligne que la référence cherchée), dans la cellule C de la feuille 3 du classeur 1 (en face de cette même référence).
Si la référence n’est pas trouvée dans la feuille 4, ne rien copier.
Les noms des classeurs, feuilles, n° de colonnes peuvent changer : Je voudrais donc définir ces nom avec une InputBox pour ne pas avoir à modifier sans arrêt la macro, de plus, d’autres personnes ne connaissant moins que rien aux macros pourront l’utiliser.
Seulement, je débute en VBA et mes connaissances étant TRES limitées, j’espère une aide de votre part (ça fait plusieurs semaines que j’essai de comprendre et je m’y arrache les cheveux dessus.
Je sais qu’il doit y avoir de grossières erreurs dans mon code (c’est vraiment pas évident, pour un débutant)
(j’ai essayé aussi une piste via un userform (dans mon classeur2) mais il faut encore que je cherche comment faire), la macro ci-dessous me semble plus rapide à faire fonctionner. Je pense avoir le principe, mais la bonne écriture me manque.
Avec tous mes remerciements à ceux qui voudront bien m’aider
Ci-dessous, la macro que je voudrais faire fonctionner :
Macro qui fonctionne : (mais obligé de tout modifier à chaque changement de noms) :
(si ça peut aider quelqu’un) et pour l’exemple de ce que je veux faire
Merci à ceux qui auront bien voulu me donner un coup de main.
Dans une macro : j’ai besoin de choisir un classeur (déjà ouverts), une feuille et une colonne et les affecter à des variables par des inputBox.
A = classeur N°1
B = classeur N° 2
C = feuille X
D = feuille Y
E = colonne A de la feuille X du classeur 1
F = colonne B de la feuille Y du classeur 2
G = colonne F de la feuille Y du classeur 2
H = colonne C de la feuille X du classeur 1
But :
Avec 2 classeurs déjà ouverts, comportant chacun plusieurs feuilles.
Je désirerais choisir le nom de mes 2 classeurs (il peut y en avoirs d’autres ouverts aussi) comparer la feuille 3 du classeur 1 avec la feuille 4 du classeur 2 et, si une référence de la colonne A de la feuille 3 est trouvée, dans la colonne B de la feuille 4 : copier les données de la cellule F de la feuille 4 du classeur 2 (se trouvant sur la même ligne que la référence cherchée), dans la cellule C de la feuille 3 du classeur 1 (en face de cette même référence).
Si la référence n’est pas trouvée dans la feuille 4, ne rien copier.
Les noms des classeurs, feuilles, n° de colonnes peuvent changer : Je voudrais donc définir ces nom avec une InputBox pour ne pas avoir à modifier sans arrêt la macro, de plus, d’autres personnes ne connaissant moins que rien aux macros pourront l’utiliser.
Seulement, je débute en VBA et mes connaissances étant TRES limitées, j’espère une aide de votre part (ça fait plusieurs semaines que j’essai de comprendre et je m’y arrache les cheveux dessus.
Je sais qu’il doit y avoir de grossières erreurs dans mon code (c’est vraiment pas évident, pour un débutant)
(j’ai essayé aussi une piste via un userform (dans mon classeur2) mais il faut encore que je cherche comment faire), la macro ci-dessous me semble plus rapide à faire fonctionner. Je pense avoir le principe, mais la bonne écriture me manque.
Avec tous mes remerciements à ceux qui voudront bien m’aider
Ci-dessous, la macro que je voudrais faire fonctionner :
Code:
Sub A1_inventaire_9_Boites_Dialogue() ' Ne fonctionne pas, (en cours de modifs)
'-compare la cellule "A2" de la colonne "A" feuille "Essai" classeur "Inventaire-Essai.xls" avec toutes les cellules de la colonne "B" de la feuille "Recapitulatif" du classeur "1Emplacement"
'Si une valeur identique est trouvée: Remplacer le contenu de la cellule "3" (C) de la feuille Essai du classeur "Inventaire-Essai.xls"
'par le contenu de la cellule de la colonne "J" de la feuille "Recapitulatif" du classeur "1Emplacement" dont la valeur est la même.
'Sinon reprendre la comparaison a la cellule "A3" et ce jusqu'à la fin de la colonne "A"
'Travail sur 2 feuilles dans 2 classeurs différents)
'Définition =======================
Dim Cel As Range, Cel_A As Range
Dim F_A As Worksheet, F_B As Worksheet
Dim Fi1 As String, Fi2 As String, F1 As String, F2 As String, C1 As String, C2 As String, D As String, A As String
'Chemin ==============================
Fi1 = InputBox("Nom du fichier 1" & ".xls", "Nom") 'Semble fonctionner
Fi2 = InputBox("Nom du fichier 2" & ".xls", "Nom") 'Semble fonctionner
F1 = InputBox("Nom de la feuille 1", "Feuil") 'Semble fonctionner
F2 = InputBox("Nom de la feuille 2", "Feuil") 'Semble fonctionner
C1 = InputBox("Colonne de référence 1", "Colonne") 'A tester
C2 = InputBox("Colonne de référence 2", "Colonne") 'A tester
D = InputBox("Colonne de Départ de copie)", "Depart") 'A tester
A = InputBox("Colonne d' arrivée (collage)", "Arrivee") 'A tester
'Set F_A = Workbooks("Inventaire-Essai.xls").Sheets("essai") 'Fonctionne
'Set F_B = Workbooks("1Emplacement.xls").Sheets("Recapitulatif") 'Fonctionne
'ou
Set F_A = Workbooks(Fi1).Sheets(F1) 'Ne fonctionne pas : l'indice n'appartient pas à la sélection.
Set F_B = Workbooks(Fi2).Sheets(F2) 'Ne fonctionne pas : l'indice n'appartient pas à la sélection.
'Traitement =======================
' For Each Cel In F_A.Range(F_A.[A1], F_A.Range("A" & Rows.Count).End(xlUp))
For Each Cel In F_A.Range(F_A.C1, F_A.Range(C1 & Rows.Count).End(xlUp)) 'Erreur compilation
'Pour chaque cellule de A 'Cel = cellules de références de feuille 3
If Not (IsEmpty(Cel)) Then
'si Cel n'est pas vide
Set Cel_A = F_B.C2.Find(Cel) 'Erreur compilation
' Set Cel_A = F_B.Columns(C1).Find(Cel) 'Columns(2)= colonne B
'fixer Cel_a en tant cellule trouvée identique à Cel
'CelA = cellules de références de feuille 4
If Not (Cel_A Is Nothing) Then
'si Cel_A existe
'Plusieurs options (à désactiver ou à activer selon les besoins) mais plus utiles si input box fonctionne.
'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 1)).Copy F_B.Cells(Cel_A.Row, "B")
'Copie les cellules B et C de la feuille 3 en C et D de la feuille 4
'copier B et C de Cel sur C et D de Cel_A
'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 2)).Copy F_B.Cells(Cel_A.Row, "B")
'copier B et C de Cel sur C et D de Cel_A
'F_B.Range(Cel_A.Offset(0, 1), Cel_A.Offset(0, 1)).Copy F_A.Cells(Cel.Row, "e")
'Copie les cellules C de la feuille 4 en E de la feuille 3
'F_B.Range(Cel_A.Offset(0, 4), Cel_A.Offset(0, 4)).Copy F_A.Cells(Cel.Row, "C")
'Copie les cellules F de la feuille 4 en C de la feuille 3
'(J=9 : Colonne de référence + différence pour colonne à copier)
F_B.Range(C2.D, C2.D).Copy F_A.Cells(Cel.Row, A) 'A tester
'Copie les cellules F de la feuille 4 en C de la feuille 3
'(J=9 : Colonne de référence + différence pour colonne à copier)
End If
End If
Next Cel 'Cel suivante
End Sub
Macro qui fonctionne : (mais obligé de tout modifier à chaque changement de noms) :
(si ça peut aider quelqu’un) et pour l’exemple de ce que je veux faire
Code:
Sub A_inventaire_9_Base() '(Fonctionne)
'(Obligation de définir tous les chemins en modifiant la macro)
'-compare la cellule "A2" de la colonne "A" feuille "AA" classeur "Classeur1.xls" avec toutes les cellules de la colonne "B" de la feuille "Toto" du classeur "Classeur2" (les noms peuvent changer)
'Si une valeur identique est trouvée: Remplacer le contenu de la cellule "3" (C) de la feuille AA du classeur "Classeur1.xls"
'par le contenu de la cellule de la colonne "F" de la feuille "Toto" du classeur "Classeur2.xls" dont la valeur est la même.
'Sinon reprendre la comparaison a la cellule "A3" et ce jusqu'à la fin de la colonne "A"
'Travail sur 2 feuilles dans 2 classeurs différents)(les noms des feuilles et des classeurs peuvent changer)
'Définition =======================
Dim Cel As Range, Cel_A As Range
Dim F_A As Worksheet, F_B As Worksheet
'Chemins ==============================
Set F_A = Workbooks("Classeur1.xls").Sheets("AA")
Set F_B = Workbooks("Classeur2.xls").Sheets("Toto")
'ou
'Set F_A = Workbooks("Classeur1.xls").Sheets(1)
'Set F_B = Workbooks("Classeur2.xls").Sheets(3)
'Traitement =======================
For Each Cel In F_A.Range(F_A.[A1], F_A.Range("A" & Rows.Count).End(xlUp)) 'Pour chaque cellule de A
'Cel = cellules de références de feuille 3
If Not (IsEmpty(Cel)) Then 'si Cel n'est pas vide
Set Cel_A = F_B.Columns(2).Find(Cel) 'Columns(2)= colonne B
'fixer Cel_a en tant cellule trouvée identique à Cel 'CelA = cellules de références de feuille 4
If Not (Cel_A Is Nothing) Then 'si Cel_A existe
'Copie =======================
'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 1)).Copy F_B.Cells(Cel_A.Row, "B")
'Copie les cellules B et C de la feuille 3 en C et D de la feuille 4
'copier B et C de Cel sur C et D de Cel_A
'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 2)).Copy F_B.Cells(Cel_A.Row, "B")
'copier B et C de Cel sur C et D de Cel_A
'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 1)).Copy F_B.Cells(Cel_A.Row, "c")
'Copie les cellules B de la feuille 3 en D de la feuille 4
'F_B.Range(Cel_A.Offset(0, 1), Cel_A.Offset(0, 1)).Copy F_A.Cells(Cel.Row, "c")
'Copie les cellules B de la feuille 4 en C de la feuille 3
'F_B.Range(Cel_A.Offset(0, 1), Cel_A.Offset(0, 1)).Copy F_A.Cells(Cel.Row, "e")
'Copie les cellules C de la feuille 4 en E de la feuille 3
F_B.Range(Cel_A.Offset(0, 4), Cel_A.Offset(0, 4)).Copy F_A.Cells(Cel.Row, "C")
'Copie les cellules F de la feuille 3 en C de la feuille 1
'(F=4 : Colonne de référence + différence pour colonne à copier)
'F_B.Range(Cel_A.Offset(0, 9), Cel_A.Offset(0, 6)).Copy F_A.Cells(Cel.Row, "C")
'Copie les cellules H, I, J, K de la feuille 4 en C, D, E, F de la feuille 3
End If
End If
Next Cel 'Cel suivante
End Sub
Merci à ceux qui auront bien voulu me donner un coup de main.
Pièces jointes
Dernière édition: