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 :

créer un classeur Excel à partir d'autres classeurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut créer un classeur Excel à partir d'autres classeurs
    Bonjour,
    J'ai un fichier client composé d'environ 500 classeurs Excel.
    Chaque classeur Excel correspond à un client différent.
    Chaque classeur est créé de la même façon, c'est à dire le nom en A4, le prénom en B4, l'adresse en A5, etc.
    Je voudrais récupérer toutes ces informations sur 1 seul classeur Excel, de manière à obtenir une liste récapitulative de mes clients pour pouvoir ensuite faire un publipostage.
    Mon problème est de savoir comment je peux récupérer "automatiquement" les informations des 500 classeurs, sans avoir à les reprendre 1 par 1.
    Espérant avoir été assez clair,
    D'avance Merci pour votre aide,

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Bonjour,
    N'ayant pas eu de réponses, je voulais apporter des infos complémentaires et une intérrogation.
    En fait, si je fais tout "à la main", le travail consisterait à ouvrir chaque classeur Excel, puis faire un copier/coller des cellules en question dans un classeur Excel "liste" qui me servira de base pour le publipostage.
    Je pense qu'en faisant une macro c'est possible, mais avec l'enregistrement automatique de la macro, j'imagine que le nom du classeur Excel sera enregistré et que cela ne fonctionnera donc plus pour les suivants.
    Je me demandais s'il était possible dans une macro de changer le nom du classeur en question et de la remplacer par une fonction, un nom... (ou autre) quelquonque qui permet d'enregistrer cette macro et qu'elle fonctionnera pour tous les classeurs Excel sur lesquels j'aurai à travailler.
    Merci d'avance pour vos idées.

    Voici la macro que je voudrais exécuter:

    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
    Sub Client()
    '
    ' Client Macro
    '
        ActiveCell.Select
        ActiveCell.FormulaR1C1 = "='[Dupont J.xls]Feuil1'!R4C2"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "='[Dupont J.xls]Feuil1'!R5C2"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "='[Dupont J.xls]Feuil1'!R4C4"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "='[Dupont J.xls]Feuil1'!R5C4"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "='[Dupont J.xls]Feuil1'!R6C4"
        ActiveCell.Offset(-3, -4).Range("A1").Select
    End Sub
    Elle me permet de copier /coller différentes informations contenues dans le classeur "Dupont J.xls" dans mon classeur "Liste".

    Mon idée est d'ouvrir un par un mes classeurs Excel Client, et d'exécuter la macro.
    Le problème est que cette macro ne fonctionne que pour le classeur Excel nommé "Dupont J.xls".
    Je voulais savoir comment remplacé "Dupont J.xls" par un nom commun qui fonctionnerait pour tous les classeurs Excel que j'ouvrirai un par un au fur et à mesure.
    La procédure que je pensais utiliser.
    J'ouvre le classeur Excel client Dupont, je lance la macro, cela me copie les données dans mon tableau final, puis je ferme le classeur Excel client Dupont.
    Ensuite même chose pour le classeur Martin...
    Merci pour votre aide

  3. #3
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Hmm tu reunis dans un classeur l'ensemble des noms de tes classeurs et avec une boucle tu stock à chaque fois le nom dans un variable. Pas sur ca marche mais bon.

    Apres si tu boucle sur les 500 classeurs j'espere t'es pas pressé :p

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Regarde la fonction elle permet de récupérer les noms des fichiers d'un répertoire durant une boucle.

    Il suffit ensuite de recopier les informations utiles.

    A+
    PPz

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Merci pour la réponse,
    Je viens de regarder sur Internet des explications de la fonction Dir.
    Je pense que çà devrait fonctionner.
    Cependant, je ne suis pas assez calé... Je ne sais pas faire les boucles ou autres...
    Quelqu'un pourrait me donner la macro à écrire pour que cela fonctionne.
    Pour info, j'ai un dossier par lettre de l'alphabet, et à l'intérieur de chaque dossier, une multitude de classeur Excel pour chaque client.

    Merci beaucoup

  6. #6
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    dans l'ordre tu dois penser a faire ceci (j'ai fais la meme y'a quelque temps )

    - pour tous les classeur de mon répertoire
    - ouvrir le classeur
    - copier les cellules voulues (ici A4, B4, A5 etc)
    - copier dans l'activeworkbook les données en A & la derniereligne + 1
    - fermer le classeur client
    - fin pour

    pour obtenir la derniere ligne d'une feuille, utilise la fonction 'end' de l'objet range.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("A65536").End(xlUp).Row
    te donne la derniere ligne utilisé sur la colonne A.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Merci Nakolito pour la réponse.
    Je suis désolé, mais je ne comprends pas bien ce qu'il faut faire. Ce n'est pas parce que c'est mal expliqué mais bien parce que je ne suis pas assez averti sur le sujet. C'est quoi l'activeworbook?
    Ce que j'ai un peu compris, c'est que je devrai ouvrir chaque classeur Excel correspondant à tous mes clients (environ 500 tous identique dans la construction), ensuite sélectionner les cellules en question et faire un copier coller dans l'activeworkbook?
    Si c'est bien çà, c'est ce que je voudrais éviter, vu le nombre de clients. Je souhaiterais pouvoir le faire de manière automatique ou semi automatique.
    Eventuellement, n'avoir qu'à ouvrir le classeur excel et lancer une macro avec un raccourci clavier ce qui serait bien plus rapide.
    Merci de vos réponses

  8. #8
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    activeworkbook c'est le classeur actif.

    thisworkbook c'est le classeur d'ou s'exécute la macro.

    workbooks(workbooks.count) c'est le dernier classeur ouvert.
    workbooks(workbooks.count - 1) c'est l'avant dernier classeur ouvert (et ainsi de suite).

    et d'ailleur je voulais mettre thisworkbook au lieu d'activeworkbook (ne jamais utiliser activeworkbook, sauf si y'a pas d'autre moyen)

    quand j'ai mis l'algo des etapes, ce ne sont pas des etapes que tu vas devoir te farcir a la main rassure toi.

    ce que j'ai décris se fait en automatique.

    Et pour ton sujet tu n'as pas d'autre option que d'ouvrir chaque classeur pour en extraire les données (la macro le fait en automatique, meme de maniere invisible si tu veux, mais les classeurs doivent etre ouvert).

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Pour faire suite à nos discussions en MP avec Nakolito, ci-joint le fichier client en question.
    Une fois la réponse trouvée, je communiquerai sur ce forum.
    Fichiers attachés Fichiers attachés

  10. #10
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    dans un premier temps, je t'invite a exécuter une macro automatique, et faire a la main ce que tu ferais sans code.
    tu fais ça pour deux ou trois feuille (en evitant de faire du zelle a coté, genre changer 50x de feuilles ou cliquer partout, par ce que sinon le code va rapidement devenir long).

    Donc ca ira de: creer un nouveau classeur a copier le contenu d'une feuille pour le coller dans le nouveau classeur et la mise en forme aussi.

    Tu arretes ta macro, tu fais ALT+F11, tu vas dans module 1 (ou 2 ou n), tu copie le code et tu le colles ici. je t'expliquerai les différentes parties du code qui aura été édité.

    PS: as tu des notions de programation ?

    j'ai fais ca vite fait.

    a mettre ou tu veux.

    qq retouche a apporter, notament sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objDossier = objFSO.GetFolder("B:\Dossier test\")
    il faudra evidement remplacer le chemin par celui ou se trouvent TOUTES les feuilles (plus de dossier par lettre)

    cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(Workbooks.Count).Sheets(1).Name = "COMMERCIAL"
    te permet de renomer la feuilles ou il y a toute les infos comme tu veux.

    et enfin cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(Workbooks.Count).SaveAs "B:\FICHIER_COMMERCIAL.xls"
    change la fin de la ligne pour enreigstrer ou tu veux.

    tu fais tourner (un peu long pour 500 feuilles sans doute) et tu me dis si ca te conviens et on apportera des modifs ensemble suivant ce que tu veux.

    PS: une fois ton fichier excel ouvrert, fait ALT+F11 pour ouvrir l'editeur de macro et tu vas sur le module1 et tu fais F5 pour exécuter.
    Fichiers attachés Fichiers attachés

  11. #11
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    pour faire suite a notre conversation en MP,

    j'ai apporté qq modification et j'ai trouvé d'ou venait l'erreur.
    C'est que quand je lui demandais de copier les données, il ecrivait sur la derniere ligne utilisé + 1 de la colonne A, donc quand j'ecrivais le nom, ca allait correctement en A2, mais quand je voulais ecrire le prenom, la derniere ligne utilisé +1 n'etait plus 1, mais 2, du coup ca ecrivait en ligne 3.

    je te mets le corrigé en PJ.

    un point important.

    Si des gens n'ont pas de donnée dans une cellule (numero de rue, adresse mail ou autre) il faut impérativement que tu mette quelque chose dans la cellule (_ ou . ou quoi que ce soit pour ne pas que la cellule soit vide) sinon ca decalera les données dans le tableau.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Entre temps, j'ai testé avec ta première version avec mon vrai fichier client. çà a pris un peu de temps mais çà a fonctionné mis à par la première ligne que tu as corrigé dans ta seconde version. Merci, je la testerai ce soir.
    Par contre, es-tu sûr qu'il faille absolument une donnée dans les cellules vides des fiches clients? Car, sur le rapport final, je n'ai pas l'impression que çà créé un décalage?
    Merci de ta réponse.

  13. #13
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    essaye tu verras

    je t'assure qu'il faut impérativement quelque chose dans les cellules, sinon ca remplit a vide et la feuille d'apres, il y a un decallage dans les lignes utilisées.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup Nakolito.
    Pourrais-tu stp poster sur ce topic ta solution, parce que je suis incapable d'expliquer ce que tu as fais.
    Merci

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Je viens de vérifier mon fichier, effectivement tout est mélangé s'il y a des cellules vides.
    J'ai fait un test sur tous les clients commançants par la lettre A, et après avoir corrigé les cellules vides en les remplaçant par un "_", cela fonctionne très bien. Parfait.
    Par contre, la correction va être très longue. Y-a-t-il une solution pour éviter de venir corriger à la main mes 500 fiches clients afin de mettre un "_" dans les cellules ou il n'y a pas d'informations, ou bien d'ignorer les cellules vides?
    Merci pour la réponse.

  16. #16
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    dans la boucle il faudrait que tu rajoute un condition de teste si la cellule est vide ou pas.

    si elle est vide, elle recoit la valeur "_" sinon rien

    et la solution ... bah

    je mets tous les en-tete dans un premier temps dans la feuille du projet. et ensuite pour chaque fichier du dossier demandé j'ouvre, je copie les cellules sous les en-tete et je ferme, je boucle sur tout les fichier.
    une fois que j'ai finis je copie la feuille dans un nouveau classeur, je fais un peu de mise en page, je renome, j'enregistre, je ferme le classeur.

    je clear la feuille du projet et je ferme.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Merci Nakolito pour l'explication.
    Désolé de te demander encore, mais pourrais-tu stp ajouter la condition pour tester les cellules vides : si elle est vide, elle recoit la valeur "_" sinon rien
    Parce que là encore je ne sais pas faire.
    Merci

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Désolé de m'incruster dans cette discussion, mais serait-il possible de voir le code exécuté par aweb pour aller chercher tous ses fichiers xls car j'aurai besoin de faire sensiblement la même chose
    Il faut que je chope le contenu de fichiers dans un format inconnu pour excel, et dont le colonnes sont séparées par des ";" .

    Merci de votre aide !

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 154
    Points : 60
    Points
    60
    Par défaut
    Bonjour willyava,
    Tu as le code dans le message n°12 de Nakolito sur la pièce jointe.
    Mais si tu as besoin, dis le moi.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Effectivement, j'aurais un peu besoin d'aide

    Je ne comprend pas grand chose au code, serait-il possible d'avoir des commentaires pour que je puisse le reprendre à ma sauce par la suite ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Copier une plage de données d'un classeur excel X a un classeur excel Y
    Par CmsrFr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/05/2012, 19h00
  2. [XL-2007] exporter les une ligne excel vers un autre classeur excel en vba
    Par Maxim0 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2011, 21h55
  3. [XL-2007] exporter les donnée excel vers un autre classeur excel en vba
    Par aminee1666 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2011, 10h58
  4. Réponses: 1
    Dernier message: 29/05/2008, 17h10
  5. [VBA-E] enregistrer un classeur excel depuis un autre classeur
    Par roseau dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/03/2007, 15h15

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