IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

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


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut InputBox pour choix des classeurs, des feuilles et des colonnes.
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    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.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Tu te lances dans du bien compliqué pour un débutant. Tu n'as pas besoin d'un userform pour choisir un fichier. Voici une méthode qui as l'avantage sur les inputboxes d'éviter les fautes de frappe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim Fichier As String
        ChDir "c:\temp" 'dossier de départ
        Fichier = Application.GetOpenFilename("Fichiers EXcel (*.xls*), *.xls*")
        If Fichier <> "" Then
     
        End If

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Bonjour Daniel C.
    Merci de t'être penché sur mon problème
    C'est justement parce que c'est compliqué que j'ai besoin d'aide.
    Ce qu'il me faudrait en premier lieu, c'est que quelqu'un me corrige ma macro que j'ai essayé de faire avec les inputbox. (pour l'userform, je verrai après, une fois que la première fonctionnera, je pense que ce sera plus facile de prendre pour base une macro déja fonctionnelle.)
    (Il doit y avoir des pros sur le site, pour qui mes erreurs doivent leur sauter aux yeux.)

    Pour ta réponse, ça ne m'avance pas trop, car je ne veux travailler sur un classeur déja ouvert et doit sélectionner aussi les feuilles de travail, ainsi que les colonnes de référence et du copier coller.
    Merci et bonne soirée

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Où se trouve--t-elle cette macro ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Bonjour Daniel
    Merci de te pencher sur mon problème

    La macro se trouve dans le fichier "classeur2"
    accessible via le bouton rouge (ou bouton marron clair pour l'userform) (j’essaye par 2 moyens différents
    je rejoint le fichier classeur2 car j'ai fait quelques modifications au niveau de l'userform.

    Ce qui m'étonne, c'est que nulle part, sur le web, je ne trouve de sujet similaire pour le choix à la fois de classeur, de feuille et de colonne par userform.
    Merci et bon noël
    Fichiers attachés Fichiers attachés

  6. #6
    Invité
    Invité(e)
    Par défaut Bonjour,
    il peut être intéressant de créer son propre inputbox dans un UserForm avec un contrôle refedit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub OK_Click()
    Me.Tag = Me.RefEdit1.Value
    Me.Hide
    End Sub
     
    Public Function reff()
    Me.Show vbModal
    On Error Resume Next
    reff = Me.Tag
    Unload Me
    On Error GoTo 0
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim reff As String
    reff = MyInputBox.reff
    If reff <> "" Then
    MsgBox reff
    End If
    End Sub
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Désolé, je ne trouve pas la macro "Sub A_inventaire_par_Boites_Dialogue_Test()"

  8. #8
    Invité
    Invité(e)
    Par défaut
    Dans le fichier joint

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Bonjour Rdurupt, Daniel et ...tous les autres

    Merci de vos réponses
    Je vais voir ce que je peux faire avec ces codes
    De mon côté, j'ai avancé un peu, j'arrive à choisir le classeur et la feuille par inputbox mais je cale pour déterminer les colonnes.
    Je rejoins mon dernier fichier (Classeur3-6)
    (La macro est dans Thisworkbook)
    pas évident quant on débute...
    Bonne soirée à tous
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-97] création raccourcis pour des ouvrir un feuille spécifique
    Par philippou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/10/2010, 18h54
  2. Réponses: 0
    Dernier message: 23/11/2009, 18h35
  3. Réponses: 0
    Dernier message: 06/10/2009, 13h02
  4. [XL-2000] [VB] Ptis soucis pour coder un changement de feuille et exploitation des données
    Par vash641 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/04/2009, 11h23
  5. Besoin des conseils pour choix de CMS
    Par kira'an dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 18/09/2008, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo