Aide sur une nouvelle MACRO

Alors j'ai bien réussi à utiliser vos conseils, maintenant la petite macro exporte la feuille vers le bon dossier avec le bon nom.

J'ai rajouté une ligne pour qu'une fois le document généré elle le referme automatiquement.

Sub copiervaleurs()
ActiveSheet.Copy 'créer un nouveau classeur avec une copie de la feuille active
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value 'remplacer les formules par leur résultat
ActiveSheet.SaveAs "N:\Fiche pays 2023sem1\" & [A1]
ActiveWorkbook.Close
End Sub

Là dans ce cas précis donc, il y a création d'un nouveau document excel qui va s'appeler [A1].

Est-il possible de créer une nouvelle macro pour une autre feuille du même classeur qui va faire la même chose mais qui, au lieu de créer un nouveau document, va copier la feuille à la suite de celui généré avec la 1ère macro ?

Bonjour

Il est d'usage de dire bonjour ici...

Par ailleurs tu cites une aide précédente sans donner le lien nécessaire pour comprendre ta question

https://forum.excel-pratique.com/excel/probleme-export-de-resultats-de-formules-186349

Bonjour, oui c'est vrai que je me suis mélangé dans mes copier/coller de questions.

J'avais mis ma question à la suite du sujet principal dans lequel je me suis fait aidé mais ayant été marqué "résolu" je me suis dit que c'était mieux de recréer un sujet. Du coup j'étais dans une continuité de "bonjour" avec mon ancien post mais ça c'était juste dans ma tête

Dans un précédent post, j'avais sollicité une aide pour exporter une feuille et créer un nouveau document tout en bisant les formules pour n'afficher que les résultats.

L'histoire est de créer un document qui comportera 2 feuilles, une pour le 1er semestre et une autre pour le 2ème semestre.

La macro ci dessus génère le nouveau document qui servira pour le 1er semestre.

J'aimerai bien une 2ème macro qui exportera dans le document crée par la première macro une autre feuille 2 à la suite de la feuille 1.

J'espère avoir été assez clair dans mes explications

bonjour,

je suppose que cette seconde macro devra être exécutée plusieurs mois après la première. Sur base de quelles infos retrouver le fichier dans lequel ajouter la seconde feuille ?

si la seconde macro sera exécutée dans la foulée de la première, pourquoi faire 2 macros ?

En effet, elle sera exécutée 6 mois plus tard.

Pour compléter des indicateurs qui sont semestriels.

Un premier bilan est effectué, on récupère les données avec la 1er macro.

6 mois après, nous récupérons les données dans un autre onglet et nous aimerions exporter ces données dans le mm fichier créé avec la 1ere macro mais dans une feuille séparée. Nous aurons donc le 1er fichier créé avec la 1er macro et 6 mois après, ce mm fichier serait enrichit d'une feuille supplémentaire pour le semestre 2.

Pour retrouver le fichier je dirai qu'il faudrait se baser sur le nom. Si le nom est identique, plutôt que d'écraser le fichier, ajouter une feuille supplémentaire à l'intérieur. Je ne sais pas si c'est possible comme opération !

re-bonjour,

Pour retrouver le fichier je dirai qu'il faudrait se baser sur le nom

comment déterminer le nom ? sur base de quelle info dans quelle cellule dans quelle feuille ? la cellule A1 de la feuille active?

Oui exactement. La 1ere MACRO nomme le fichier nouvellement créé en fonction du contenu de la cellule A1.

La 2ème macro sera effectué sur un document similaire à celui de la 1ère MACRO, donc il sera nommé aussi en fonction du contenu de la cellule A1.

Du coup je me disais qu'une discri sur le nom devait être possible

Sur base de ce que j'ai compris, non testé

Const rep = "N:\Fiche pays 2023sem1\" 'repertoire

Sub copiervaleursem2() 'macro 2nd semestre
    Set sws = ActiveSheet
    Set wb = Workbooks.Open(rep & sws.Range("a1"))
    sws.Copy after:=wb.Sheets(1)
    Set wsc = ActiveSheet
    wsc.UsedRange.Value = wsc.UsedRange.Value 'remplacer les formules par leur résultat
    wb.Close True
End Sub

Sub copiervaleursem1() 'macro 1er semestre
    ActiveSheet.Copy 'créer un nouveau classeur avec une copie de la feuille active
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value 'remplacer les formules par leur résultat
    ActiveSheet.SaveAs rep & [A1]
    ActiveWorkbook.Close
End Sub

Déjà merci beaucoup pour cette réponse.

J'espère avoir correctement suivi le processus.

Lorsque je lance une première fois la MACRO, elle génère bien un fichier nommé [A1]

Lorsque je relance la MACRO (il n'y en a plus qu'une seule maintenant si j'ai bien suivi) mais sur une autre feuille du document initial comportant les données du semestre 2, il détecte qu'un document du même nom existe déjà et me propose de le remplacer en l'écrasant.

Le but serait qu'il ne propose pas cela mais ouvre le fichier du même nom et ajouter une feuille à l'intérieur.

bonjour,

(il n'y en a plus qu'une seule maintenant si j'ai bien suivi)

ben non, il y en a 2.

copiervaleursem1(): sem1 pour 1er semestre

copie l'onglet sélectionné et crée un nouveau fichier (=classeur) nommé selon le contenu de de la cellule A1 de l'onglet sélectionné et enregistre ce fichier.

et copiervaleursem2(): sem2 pour 2nd semestre

copie l'onglet sélectionné dans un fichier existant nommé selon le contenu de la cellule A1 de l'onglet sélectionné et enregistre ce fichier.

Oui je me suis mal exprimé, il y a 2 macro mais dans un seul bloc ? On est d'accord que je copie/colle le bloc entier comme suite lorsque je créé la MACRO ?

Je ne fais pas une macro avec copiervaleursem2 et une autre avec copiervaleursem1 ? Ou alors je n'ai pas compris comment exécuter la 2ème macro et j'exécute sans cesse la 1ere ?

*********************

Const rep = "N:\Fiche pays 2023sem1\" 'repertoire

Sub copiervaleursem2() 'macro 2nd semestre
    Set sws = ActiveSheet
    Set wb = Workbooks.Open(rep & sws.Range("a1"))
    sws.Copy after:=wb.Sheets(1)
    Set wsc = ActiveSheet
    wsc.UsedRange.Value = wsc.UsedRange.Value 'remplacer les formules par leur résultat
    wb.Close True
End Sub

Sub copiervaleursem1() 'macro 1er semestre
    ActiveSheet.Copy 'créer un nouveau classeur avec une copie de la feuille active
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value 'remplacer les formules par leur résultat
    ActiveSheet.SaveAs rep & [A1]
    ActiveWorkbook.Close
End Sub

bonjour,

pour executer une macro tu fais alt-F8 et tu choisis la macro que tu veux utiliser.

Ok, je pense avoir réussi à utiliser correctement les 2 macros.

La 1ère génère bien le fichier à l'endroit voulu et le [A1] (Contenu de la cellule A1) + .xls à la fin.

La 2ème me met le message d'erreur suivant : Elle ne parvient pas à trouver le fichier nommé [A1] (contenu de la cellule A1).

En fait il recherche le document sans prendre en compte le .xls à la fin, pour lui doc et doc.xls sont des documents différents.

Du coup l'exécution s'arrête

bonjour,

bizarre...

Si tu as une version 2016, l'instruction .saveas ne devrait pas créer de fichier avec une extension .xls, mais .xlsx et cela ne devrait pas poser de problème pour la bonne exécution de la macro sem2

voici une correction (non testée)

Const rep = "N:\Fiche pays 2023sem1\" 'repertoire

Sub copiervaleursem2() 'macro 2nd semestre
    Set sws = ActiveSheet
    Set wb = Workbooks.Open(rep & sws.Range("a1") & ".xlsx")
    sws.Copy after:=wb.Sheets(1)
    Set wsc = ActiveSheet
    wsc.UsedRange.Value = wsc.UsedRange.Value 'remplacer les formules par leur résultat
    wb.Close True
End Sub

Sub copiervaleursem1() 'macro 1er semestre
    ActiveSheet.Copy 'créer un nouveau classeur avec une copie de la feuille active
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value 'remplacer les formules par leur résultat
    ActiveSheet.SaveAs rep & [A1] & ".xlsx", FileFormat:=51
    ActiveWorkbook.Close
End Sub

A l'avenir, comme indiqué dans la charte, merci de mettre un fichier exemple représentatif avec les macros.

Yes c'est un .xlsx en effet, my bad.

Je suis sur une version 2016 en effet.

Voici un document de travail avec 2 feuilles, en testant l'exécution des MACRO dessus j'ai toujours cette erreur.

re-bonjour,

je ne parviens pas à reproduire le problème chez moi. Le code initial et sa dernière version fonctionnent tous les 2. As-tu essayé la dernière version ?

Quel message d'erreur as-tu ? sur quelle instruction ?

Re bonjour,

En fait c'est moi qui exécutais mal la MACRO, j'exécutais la 2ème MACRO sur la même feuille qui avait donc le mm nom que la feuille 1 d'où le problème sans doute.

Tout fonctionne très bien en effet !

Un très grand merci !

Alors je viens de me rendre compte du problème que je rencontre. Il est lié au chemin où je mets les fichiers nouvellement créés.

Dans l'exemple du document test ici, le chemin est arbitraire et n'existe pas sur mon ordinateur.

Je réussi à faire fonctionner les macro correctement lorsque j'indique "C:\Users\MOI\Desktop\" tout fonctionne

Lorsque je mets à la place un emplacement sur le réseau et pas sur ma machine j'obtiens cette erreur :

erreur2 erreur

J'espère qu'il y a une explication, je ne comprend pas pkoi le chemin aurait un impact sur la bonne exécution des macros !

re,

on parle bien d'une erreur sur cette instruction ?

 Set wb = Workbooks.Open(rep & sws.Range("a1") & ".xlsx")

cela pourrait être dû à un dépassement de la limite de longueur pour un chemin d'accès (260 caractères), si c'est le cas ajoute \\?\ devant ton chemin

exemple

Const rep = "\\?\N:\Fiche pays 2023sem1\" 'repertoire

Oui l'erreur est bien sur cette instruction.

J'ai tout d'abord réduit drastiquement la longueur du chemin mais toujours sur le réseau, toujours la même erreur.

J'ai ensuite suivi votre conseil, le chemin est désormais précédé de \\?\

J'ai cette nouvelle erreur

erreur3
Rechercher des sujets similaires à "aide nouvelle macro"