InputBox pour choix des classeurs, des feuilles et des colonnes.

Toine45

XLDnaute Junior
Bonjour à tous
Dans une macro (Sur Excel 2003) : j’ai besoin de choisir un classeur (normalement déjà ouverts), une feuille et une colonne et les affecter à des variables par des inputBox. (Ou, mieux, en passant par un userform)
J’ai fait un userform dans le classeur2 (Bouton Comparer-Copier) mais je ne sais pas comment récupérer les variables pour les mettre dans ma macro.

Je débute en VBA et ne connais pas encore les bonnes syntaxes à employer, il y à tellement à apprendre….
J’ai déjà lu des dizaines de tutos et de posts, mais n’ai rien trouvé sur le choix de feuille par userform.

Je sollicite donc votre aide pour la correction de ma macro (les explications sur mes erreurs seront aussi les bienvenues)

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 des InputBox (ou un userform) 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, déjà que les miennes sont déjà très faibles.
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’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 trouve comment faire), la macro ci-dessous, avec les inputbox 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 dans le classeur2)

Code:
Sub A_inventaire_par_Boites_Dialogue_Test() ' Ne fonctionne pas, (en cours de modifs)

Rem -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)
'Choix des classeurs, des feuilles et des colonnes à comparer et à copier : par inputbox (ou par userform)

'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
Dim Wk1 As Workbook, Wk2 As Workbook

'Attribution des variables ==============================
Fi1 = InputBox("Nom du fichier 1" & ".xls", "Nom1") 'Semble fonctionner
Fi2 = InputBox("Nom du fichier 2" & ".xls", "Nom2") 'Semble fonctionner
F1 = InputBox("Nom de la feuille 1", "Feuil1") 'Semble fonctionner
F2 = InputBox("Nom de la feuille 2", "Feuil2") 'Semble fonctionner

C1 = InputBox("Colonne de référence 1", "Colonne1") 'A tester
C2 = InputBox("Colonne de référence 2", "Colonne2") 'A tester
D = InputBox("Colonne de Départ de copie", "Depart") 'A tester
A = InputBox("Colonne d' arrivée (collage)", "Arrivee") 'A tester

'Vérification d'ouverture des classeurs ==============================
On Error Resume Next
Set Wk1 = Workbooks(Fi1 & ".xls")
If Err <> 1 Then
    Call Ouverture_Fichier
Else
    MsgBox "Le fichier " & Fi1 & " est déja ouvert"
End If

On Error Resume Next
Set Wk2 = Workbooks(Fi2 & ".xls")
If Err <> 1 Then
    Call Ouverture_Fichier
Else
    MsgBox "Le fichier " & Fi2 & " est déja ouvert"
End If

'Pour mémoire : (Macro d'ouverture de classeur - située plus haut)
            'Sub Ouverture_Fichier()
            'Dim Chemin_et_Fichier As String, Fichier As String, Rep_Fichier As String
            'recuperation du chemin et nom de fichier
            'Chemin_et_Fichier = RechercheFichier(Rep_Fichier)
            'If Chemin_et_Fichier = "" Then
            'MsgBox "Vous n'avez sélectionné aucun fichier"
            'Else
            'ouverture ficher selectionne
            'Workbooks.Open (Chemin_et_Fichier)
            'End If
            'End Sub
            
'Vérification du nom des feuilles ==============================
'Vérifie que les feuilles demandées existent

 Dim myArray As Variant, Nom As Variant 'déclaration des variables
 myArray = Array(F1, "F2") 'création d'une variable dite Array avec 2 valeurs
 For Each Nom In myArray 'boucle dans la variable Array
 If TestOnglet(Nom) = False Then 'Test appelant la fonction
    MsgBox "La feuille " & Nom & " n'existe pas."
 End If 'fin de la condition
 Next Nom 'appel de l'élément suivant de l'Array

'Attribution des chemins ==============================
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.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
        '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
           
            '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
        End If
    End If
Next Cel    'Cel suivante
End Sub

En pièce jointe : mes 2 fichiers d’essais (les macros et userform étant dans le classeur2)

Merci infiniment à tous ceux qui auront pris le temps de m’aider.
 

Pièces jointes

  • Fichiers pour macro.zip
    132.3 KB · Affichages: 49

Discussions similaires

Réponses
3
Affichages
274

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T