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 :

Améliorer une macro pour créer un nouveau classeur avec nom de fichier donné à partir de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 37
    Points
    37
    Par défaut Améliorer une macro pour créer un nouveau classeur avec nom de fichier donné à partir de cellules
    Bonjour,

    Dans un tableau j'ai une macro qui me permet actuellement d'extraire les données d'une feuille dans un classeur existant (fichier déjà créé).
    J'aimerais l'améliorer pour que le classeur destinataire soit créé automatiquement (je ne souhaite pas le créer au préalable), et que le nouveau fichier soit déjà nommé avec comme nom de fichier des données de 3 cellules concaténées, je ne sais même pas si c'est possible à faire !!

    exemple:
    valeurs dans les cellules: I1= AAAA; I2=BBBB; I3=CCCC
    Le nom du fichier créé sera AAAA_BBBB_CCCC.xls

    Voilà la macro que j'utilise actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Extraction_client()
    '############### Copier les données dans d'autres classeurs ##################
    Dim wkDest As Workbook ' Classeur destinataire
     
    Set wkDest = Application.Workbooks.Open("C:\Users\Desktop\xxxxxxxxxx.xlsm")
     
    ' le classeur PMI.xlsm contient ce code et est donc accessible par ThisWorkBook
    ThisWorkbook.Sheets("Feuil1").Cells.Copy wkDest.Sheets("Feuil1").Range("A1:E100")
     
    ' wkDest.Close True 'Ferme en sauvant
     
    End Sub
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    un exemple à adapter au contexte (1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
        With ThisWorkbook.Worksheets("Feuil1")
            .Copy
            ActiveWorkbook.SaveAs .Parent.Path & "\" & Join(Application.Transpose(.[I1:I3].Value), "_") & ".xls"
        End With
    End Sub
    (1) Cela dépend aussi des informations omises, comme par exemple la version d'Excel
    devant pourtant être renseignée dans le préfixe de cette discussion ! …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Ouah, trop bon ça marche !!!
    Par contre juste un petit complément I1, I2 et I3 se trouve sur la feuil2, que dois-je mettre du coup?
    Merci encore.

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    C'est sûr, comment le deviner ?‼
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo()
        Feuil1.Copy
        ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Join(Application.Transpose(Feuil2.[I1:I3].Value), "_") & ".xls"
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 37
    Points
    37
    Par défaut
    Avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
        With ThisWorkbook.Worksheets("Feuil1")
            .Copy
            ActiveWorkbook.SaveAs .Parent.Path & "\" & Join(Application.Transpose(Feuil2.[A2:C2].Value), "_") & ".xls"
        End With
    End Sub
    J'ai le message d'erreur: Erreur d'exécution '5', argument ou appel de procédure incorrect

    De plus j'aimerais plutôt un export des cellules car dans mon fichier source j'ai un filtre et je ne veux pas voir les autre valeurs dans le fichier destinataire quand je déroule la flèche du tri.
    Merci.

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Aucun souci de mon côté ! Évidemment si le CodeName de "Feuil2" n'est pas Feuil2, simple à vérifier pourtant dans le VBE …

    Et je rappelle que I1:I3 est en vertical tandis que A2:C2 est en horizontal donc pas besoin alors de transposition ‼

    Donc on va attendre une présentation digne de ce nom, c'est à dire claire et complète (voir les règles du forum)
    car là je ne suis pas à la disposition d'informations délivrées au compte goutte remettant en cause le code précédent !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par guillaume7684 Voir le message
    Avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
        With ThisWorkbook.Worksheets("Feuil1")
            .Copy
            ActiveWorkbook.SaveAs .Parent.Path & "\" & Join(Application.Transpose(Feuil2.[A2:C2].Value), "_") & ".xls"
        End With
    End Sub
    J'ai le message d'erreur: Erreur d'exécution '5', argument ou appel de procédure incorrect
    Tu as mélanger les deux codes, utilise soit l'un soit l'autre ...


    Sinon en repartant de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Extraction_client()
    '############### Copier les données dans d'autres classeurs ##################
    Dim wkDest As Workbook ' Classeur destinataire
     
    Set wkDest = Application.Workbooks.add
     
    ' le classeur PMI.xlsm contient ce code et est donc accessible par ThisWorkBook
    ThisWorkbook.Sheets("Feuil1").Cells.Copy wkDest.Sheets("Feuil1").Range("A1:E100")
     
     wkDest.SaveAs Thisworkbook.Path & "\" & Join(Application.Transpose(Feuil2.[I1:I3].Value), "_") & ".xls"
     
     
     
    End Sub
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 37
    Points
    37
    Par défaut
    Bonjour halaster08,

    Avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Extraction_client()
    '############### Copier les données dans d'autres classeurs ##################
    Dim wkDest As Workbook ' Classeur destinataire
     
    Set wkDest = Application.Workbooks.add
     
    ' le classeur PMI.xlsm contient ce code et est donc accessible par ThisWorkBook
    ThisWorkbook.Sheets("Feuil1").Cells.Copy wkDest.Sheets("Feuil1").Range("A1:E100")
     
     wkDest.SaveAs Thisworkbook.Path & "\" & Join(Application.Transpose(Feuil2.[A2:C2].Value), "_") & ".xls"
     
     
    End Sub
    J'ai une erreur de compilation, référence incorrecte ou non qualifiée. Et dans le débogage il me surligne .ThisWorkbook de la ligne 10

    Merci.

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    J'avais pourtant édité rapidemment, il n'y a plus de "." devant le thisworkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Extraction_client()
    '############### Copier les données dans d'autres classeurs ##################
    Dim wkDest As Workbook ' Classeur destinataire
     
    Set wkDest = Application.Workbooks.add
     
    ' le classeur PMI.xlsm contient ce code et est donc accessible par ThisWorkBook
    ThisWorkbook.Sheets("Feuil1").Cells.Copy wkDest.Sheets("Feuil1").Range("A1:E100")
     
     wkDest.SaveAs Thisworkbook.Path & "\" & Join(Feuil2.[A2:C2].Value, "_") & ".xls"
     
     
    End Sub
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 37
    Points
    37
    Par défaut
    Même message d'erreur mais là j'ai toute la ligne de surlignée dans le débogage:
    wkDest.SaveAs ThisWorkbook.Path & "\" & Join(Feuil2.[A2:C2].Value, "_") & ".xls"

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Aucun souci de mon côté ! Évidemment si le CodeName de "Feuil2" n'est pas Feuil2, simple à vérifier pourtant dans le VBE …

    Et je rappelle que I1:I3 est en vertical tandis que A2:C2 est en horizontal donc pas besoin alors de transposition ‼

    Donc on va attendre une présentation digne de ce nom, c'est à dire claire et complète (voir les règles du forum)
    car là je ne suis pas à la disposition d'informations délivrées au compte goutte remettant en cause le code précédent !
    Bonjour,

    J'y suis presque par contre si je souhaite supprimer la transposition pour avoir des valeur sur la même ligne, que dois-je mettre à la place de transpose?
    J'ai un filtre dans les colonnes du classeur source, j'aimerais que dans le classeur destination il n'y est que les valeurs filtrées qui apparaissent.

    Merci encore.

Discussions similaires

  1. Comment utiliser une macro pour créer un compteur
    Par PetitChris dans le forum Macros Access
    Réponses: 8
    Dernier message: 12/12/2014, 03h21
  2. [XL-2007] Excel plante avec macro sauvegarde feuille vers nouveau classeur avec nom spécifique
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 10/05/2012, 14h59
  3. [XL-2003] Boucle pour créer de nouveaux classeurs et y importer des données
    Par Isabelle86 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/12/2010, 09h20
  4. [Toutes versions] une macro pour créer un module standard
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2009, 17h42
  5. Macro pour créer un nouveau fichier avec de nouvelles macros
    Par yodu29 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2008, 14h21

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