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

Excel Discussion :

Import de données depuis un autre fichier à nom variable


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Import de données depuis un autre fichier à nom variable
    Bonjour,

    Dans le cadre de mon travail, j'essaie de créer une macro pour importer des données d'un fichier à un autre.

    1er fichier
    Il contient la feuille ''source'' avec toujours le même tableau modèle mais dans un fichier au nom toujours variable.
    Exemple : racine_823_V1.xlsm ; racine_825_V2.xlsm ; ect

    2ème fichier impression au nom invariable
    Il contient le modèle d'étiquette à remplir avec les données du 1er fichier.

    Pour le besoin du poste, j'ai anonymisé les feuilles et les ai regroupé dans le même fichier.

    J'ai réussi à créer un bout de code (je débute) et j'arrive (en semi-auto) à Activer le 1er WorkBook mais je ne suis pas plus avancé, je ne sais pas comment poursuivre pour référencer les cases à partir de là.

    1/ Quelqu'un a-t-il une solution pour trouver le premier fichier automatiquement ?
    racine_*.xlsm ne fonctionne pas.

    2/ j'ai essayé des formules du type : =[Commande]Commande!C77 mais ça ne fonctionne pas car la taille des cellules n'est pas la même (fusionnées)

    3/ De plus je n'arrive pas à ''automatiser" le nom du 1er fichier [entre crochets]
    J'ai essayé des truc du genre :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    				=[O2]Commande!C7:D7				
    				=[=CONCATENER(E2;H2;K2;M2)]Commande!C7:D7
    				=[=E2&H2&K2&M2)]Commande!C7:D7

    Si quelqu'un avait une idée pouvant me faire avancer..


    Merci
    Jules
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous,

    Bon alors plusieurs remarques :
    • - tu as beaucoup de cellules fusionnées et sincèrement au vu de ton fichier c'est totalement inutile. Il faut savoir que les cellules fusionnées sont à proscrire le plus possible car dès que l'on veut automatiser des tâches c'est la galère, les macros sont toujours complexifiées donc à éviter le plus possible, et dans ton cas c'est très faisable.
    • - d'où tire-tu ton numéro et ta version de ton fichier (cellules H2 et K2)
    • - ton premier fichier est-il une sortie d'un autre programme (genre un ERP par exemple) ou est-il une sorte de base fixe (toujours au même endroit) que l'on fait évoluer par programme ou manuellement ?
    • - ton deuxième fichier selon tes dires "contient un modèle d'étiquette..." est-ce un fichier modèle (.XLTM) ou un fichier vierge qui possède une trame pour éditer tes étiquettes.
    • - enfin peux-tu nous fournir le processus détaillé de l'enchainement de tes actions et des fichiers



    Quand je dis détaillé j'entends vraiment détailler y compris des actions qui selon toi ailles de soi.

    Exemple :
    1. - je vais sur explorateur Windows sur le dossier ....
    2. - je sélectionne le fichier ..... Parce que ......
    3. - etc ...


    en attendant tes réponses

    bonne journée
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour ta réponse Igloobel.
    - J’ai créé un fichier simplifié pour le besoin du poste mais il va être difficile de défusionner les cellules dans la vraie version du fichier. Je vais y réfléchir.
    - Le 1er fichier est une sorte de bon de commande à remplir par des clients. Seules les cases à compléter seront accessibles et seront verrouillées un maximum par des choix limités avec listes déroulantes par exemple.
    Le numéro et la version du fichier seront incrémentés manuellement.

    - Le fichier d’étiquette n’est pas un .XLTM mais un simple .XLSM qui me servira à lancer les impressions d’étiquettes.

    - Dans l’idéal, je souhaite ouvrir manuellement les 2 fichiers,
    1 : bon de commande que j’ai besoin d’imprimer (exemple le 783_V2)
    2 : le fichier étiquette

    Puis, depuis le fichier étiquette, je clique pour importer les infos du 1er dans le 2nd.
    J’avais d’abord mis les 2 feuilles dans le même fichier et ça donné quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      Sub Import()
     
        'Etiquette 2
        Sheets("Impression").Range("H7").FormulaR1C1 = Sheets("Commande").Range("C7").Value
        Sheets("Impression").Range("H8").FormulaR1C1 = Sheets("Commande").Range("E7").Value
        Sheets("Impression").Range("H9").FormulaR1C1 = Sheets("Commande").Range("F7").Value
     
        'Etiquette 3
        'Etiquette 4
        'ect ect
     
      End Sub
    Ça s'est compliqué lorsque j'ai voulu reproduire cela mais avec feuille « Commande » dans un autre fichier au nom variable.

    J’espère que c’est plus clair désormais.
    Merci pour le temps consacré à mon problème.
    Jules

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonjour Igloobel, Jules_63, la forum
    Une solution simple avec PowerQuery à télécharger du net et à intégrer à ton version XL-2013
    si non je propose comme départ :
    J'AI SUPPRIME LES FUSIONS DES CELLULES (inutile et cause des problèmes lors de programmation)
    un dossier nommé GESTION DES COMMANDES, dans ce dossier un classeur nommé GESTION DES COMMANDES avec deux onglets : "Impression" et "Commande"
    les classeur reçus ont toujours un nom qui contient le numéro de la commande ("blala + Numéro + blabla")
    quand tu reçoit un fichier tu vérifie que le nom de l'onglet ou se trouve les données est "Commande" puis n'oublier pas de fermer ce classeur
    le code que je propose te demande de saisir à l'aide d'un inputbox le numéro de la commande puis ouvre le classeur et copie les données existantes sur ton classeur ouvert nommé GESTION DES COMMANDES dans l'onglet "commande"
    Le reste en va le voir ultérieurement si ça t'arrange:
    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
    Sub importProdVte()
    Dim wkA As Workbook, wkB As Workbook
    Dim chemin As String, fichier As String
    Dim j As Long
    Dim k As Long
    Application.ScreenUpdating = False
    Set wkA = ThisWorkbook
    Dim NumCommande As String
    NumCommande = InputBox("Merci de saisir le numéro du bon de commande à importer ", "Commande")
    chemin = "C:\Users\DELL\Desktop\GESTION DES COMMANDES\"
    fichier = Dir(chemin & "*" & NumCommande & "*")
    Workbooks.Open fichier
    Set wkB = ActiveWorkbook
    j = wkB.Sheets("Commande").Range("F" & Rows.Count).End(xlUp).Row
    k = wkA.Sheets("Commande").Range("F" & Rows.Count).End(xlUp).Row
    wkA.Sheets("Commande").Range("C6:F" & k).ClearContents
    wkB.Sheets("Commande").Range("C6:F" & j).Copy
    wkA.Sheets("Commande").Range("C6").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    wkB.Close True
    Application.ScreenUpdating = True
    End Sub
    Fichiers attachés Fichiers attachés
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  5. #5
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour

    C'est bien mieux même si ce n'est pas encore parfait.

    Bon ton fichier commande n'a pas besoin de la colonne D (fusion avec la colonne C) même si les listes déroulantes sont désormais fonctionnelles sur des cellules fusionnées mais je reste sur mon avis quand ce n'est pas utile on ne fusionne pas et là dans ton exemple la colonne D ne sert à rien. Si tu regardes bien ton code, tu es obligé de sélectionner chaque cellule parce qu'elles ne sont pas contiguë à cause de tes cellules fusionnées alors que sans elles tu peux faire une boucle.

    On peut aussi facilement créer une boucle pour les Etiquettes au lieu de faire Etiquette 2, Etiquette 3, Etiquette 4 ...

    Ton fichier commande à cependant la bonne structure mais pour la parfaire je te conseille de le transformer en un tableau structuré cela simplifiera ton traitement.

    Là dans ton exemple on a 6 lignes mais dans la vraie vie tes commandes peuvent avoir combien de lignes (20, 50, 100, 500, 10 000 ....) ?

    Bien si on réfléchit bien c'est une fois ton classeur2 ouvert que tu vas chercher ton classeur1 (tes commandes). Je suppose que toutes tes commandes sont dans un dossier spécifique, du genre : "Commandes en attente"

    Tes étiquettes sont comment 1, 2, 3 colonnes pas de colonnes ?



    Voici un code qui permet d'ouvrir le fichier qui va bien à inclure dans le fichier étiquette

    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
    '*********************************************************************
        'ouverture d'un fichier par boite FileDialog
    '********************************************************************************
        'Declaration d'une variable comme objet FileDialog
        Dim fd As FileDialog
     
        'Creation d'un objet FileDialog comme un File Picker dialog box.
        Set fd = Application.FileDialog(msoFileDialogFilePicker)
     
        'Déclaration d'une variable contenant le "path" de style variant
        Dim vrtSelectedItem As Variant 'obligatoirement de type variant
     
        With fd
     
            'donner le Path initial lors de l'affichage de la boite filedialog.
            'Cela permet d'arriver directement sur le repertoire addéquat
            '.InitialFileName = "D:\Travail\Commandes\"
     
            ' on peut utiliser une adresse de type reseau
            .InitialFileName = "\\REZO-01\Traitement_Donnees\"
     
    	' Utilisation de la méthode show pour afficher le File Picker de la boite de dialogue et
            '   retourne la valeur de l'action de l'utililisateur.
            If .Show = -1 Then
     
                For Each vrtSelectedItem In .SelectedItems
     
                    'vrtSelectedItem est un String contenant le "path"  de chaque item selectionné.
                    'affichage du "PATH et du fichier selectionné" dans une boite message
                    'MsgBox "Vous avez sélectionné : " & vrtSelectedItem
                    file_select = vrtSelectedItem
                Next vrtSelectedItem
     
            'Au cas ou l'utilisateur appuis sur Cancel...
            Else
                'Dans ce cas je ne fais rien.
            End If
        End With
     
        'Pour le cas rien.
        Set fd = Nothing
     
    '**********************************************************************************
        Workbooks.Open file_select
    L'utilisation des "FileDialogs" permet d'utiliser les boites d'Excel d'ouverture et de sauvegarde et avoir quelque chose de propre

    J'ai mis beaucoup de commentaires pour que tu comprennes comment cela fonctionne

    Voici mes observations

    A BENNASR :Coucou:

    C'est vrai que l'InputBox est sympa et cela fonctionne bien mais le risque d'une mauvaise saisie m'a fait arrêter cette façon de récupération de fichier, je préfère les FilesDialogs car c'est un simple Clic sur le fichier voulu
    Sinon je suis d'accord avec ta proposition il ne manque plus que la boucle pour faire toutes les étiquettes
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

Discussions similaires

  1. [XL-2016] Import de données à partir d'un fichier à nom variable
    Par Phil333250 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/04/2018, 16h08
  2. Importer des données depuis un autre classeur excel via macro
    Par leodesclos dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/03/2017, 05h20
  3. Excel VBA - importer des données depuis un autre fichier excel
    Par katiar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/02/2016, 19h26
  4. [XL-2013] Importation des données d'un autre fichier
    Par philippe34130 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2015, 18h21
  5. importer des données d'un autre fichier excel
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/05/2008, 16h51

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