Aide pour une macro d'excel

Fermé
thierry - 28 juin 2008 à 09:41
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 - 11 juil. 2008 à 16:58
Bonjour,
Ne connaisant rien en programmation ni les astuces des macros d'excel.
Voici ce que je voudrai faire :
Ouverture automatique d'un fichier txt
ecrire le contenu d'une cellule A1. ( ex : sujet de ma page )
Enregistrer ce fichier dans un repertoire "x" sous le nom inscrit dans la cellule B1. ( ex : mapage.php )
Puis ainsi de suite :
Ouverture automatique d'un fichier avec insersion du contenu d'une cellule A2.( ex : sujet de ma deuxieme page )
Enregistrer ce fichier dans un repertoire "x" sous le nom inscrit dans la cellule B2. ( ex : madeuxiemepage.php )
etc etc ...
Vraiment si quelqu'un pouvait m'aider, ça me rendrai un super service.
Merçi d'avance
Thierry

Configuration: Windows XP
Firefox

8 réponses

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
28 juin 2008 à 11:31
Bonjour Thierry,
même sans rien y connaître, ce que tu peux faire pour commencer, c'est utiliser l'enregistrement automatique de macros :
Dans Excel, à partir de ton fichier initial qui contient tes titres, fais Outils/Macro/Nouvelle Macro / donne un nom / Enregister dans : ce classeur, puis OK
A partir de là, toutes les opérations que tu réalises manuellement sont enregistrées en VBA.
Tu peux au moins :
- créer un nouveau fichier (Ctrl + N)
- dans ce classeur vierge, écrire ton titre ("sujet de ma page")
- enregister ce classeur en format texte sous C:\cheminx\mapage
- fermer ce classeur
Tu ne fais la manip' qu'une seule fois et tu cliques sur "Arrêter l'enregistrement de la macro".
Ainsi, tu auras fait le plus gros du boulot.
Retrouve ensuite ta macro : Outils/Macro/ nom de ta macro puis Modifier

Tu devrais trouver une ligne de code
ActiveCell.FormulaR1C1 = "sujet de ma page"

Pour aller chercher le titre dans A1 du classeur initial, tu la remplaces par
ActiveCell.Value = ThisworkBook.Sheets(1).range("A1").Value

De même, tu devrais trouver une ligne
ActiveWorkbook.SaveAs Filename:= _ 
"C:\Chemin\x\mapage.txt"

Pour aller chercher le nom de fichier dans B1 du classeur initial, tu la remplaces par
ActiveWorkbook.SaveAs Filename:=  _ 
"C:\Chemin\x\" & thisworkbook.sheets(1).range("B1").value & ".txt"

(dis-moi, .php , c'est l'extension ou bien ça fait partie du nom du fichier ??)

Après, pour répéter l'opération autant de fois que tu as de lignes, il faudra créer une boucle.
Poste-nous ta macro et, dans un deuxième temps, on verra comment la modifier en conséquence.
A suivre...
0
Super merci Ivan-hoe, j étudie cela maintenant.
0
Un grand merci Ivan-hoe pour t'etre penché sur mon probleme, grace a tes precieux conseils j'avance ( cela fonctionne, le fichier se crée) mais malgré beaucoup de perseverance je n ai pas encore reussi a remplacer "Classeur43.txt" par le nom contenu dans la celule B1.

Voici pour le moment le meilleur code que j ai reussi à faire :

Sub Macro8()
'
' Macro8 Macro
'

'
Range("A1").Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:= _
"C:\chemin\x\Classeur43.txt", FileFormat:= _
xlText, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub


Si je fait :

Sub Macro8()
'
' Macro8 Macro
'

'
Range("A1").Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:= _
"C:\Chemin\x\" & thisworkbook.sheets(1).range("B1").value & ".txt", FileFormat:= _
xlText, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

Cela ne fonctionne pas ( je dois faire une boulette quelque part mais ou ?? )

Peux tu encore m'apporter tes lumieres, ainsi que pour la boucle ( je voudrais simplement que A1 devienne A2 puis A3 puis A4 etc ... de meme que B1, B2, B3, B4 etc ...
Merci encore
Thierry
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
30 juin 2008 à 09:51
Bonjour !
Disons que ta liste de titres et de noms de fichier se trouve sur une feuille appelée "Thierry"
Tu affectes à la variable Chemin le chemin d'accès complet de ton répertoire (sans \ à la fin)
On fait ici une boucle avec i = 1 à 5 et on remplace la coordonnée de la ligne par i. Ca correspond aux numéros des lignes qui contiennent tes titres et noms. A modifier en conséquence.
Si ton nombre de fichiers à créer n'est pas fixe, on pourrait le déterminer automatiquement (en comptant le nombre de titres dans la feuille "Thierry")
Si tu veux enregistrer dans un autre format que .txt, tu modifies dans le code & ".txt" et FileFormat:=xlText
Si tu as déjà mis ton extension dans le nom de fichier, inutile alors de la rajouter.
A suivre...
Sub MacroThierry()
'cette macro est contenue dans ton fichier initial
'(celui qui contient les titres et noms)

'déclaration des variables
Dim i As Integer '(compteur)
Dim Chemin As String '(chemin d'accès pour l'enregistrement)

Chemin = "C:\Dossier1\Dossier2\DossierX"

For i = 1 To 5 'début de la boucle
    'crée un nouveau fichier
    Workbooks.Add
    
    'écrit le titre en A1 de la feuille 1 _
    à partir de la colonne A de la feuille "Thierry"
    ActiveCell.FormulaR1C1 = ThisWorkbook.Sheets("Thierry").Range("A" & i).Value
    
    'enregistre sous le nom contenu dans la colonne B de la feuille "Thierry"
    ChDir Chemin
    ActiveWorkbook.SaveAs Filename:= _
        Chemin & "\" & _
        ThisWorkbook.Sheets("Thierry").Range("B" & i).Value & ".txt", _
        FileFormat:=xlText
    
    'ferme le fichier
    ActiveWorkbook.Close (False)

Next i 'fin de la boucle

End Sub
0
Merci encore Ivan-hoe pour ce code, d'autant plus qu'il est commenté ( tres utile pour le débutant que je suis )
Mais je reste confronté à ce probleme
Erreur d execution '9': L'indice n'appartient pas a la selection
Cette ligne est surlignee en jaune :
ActiveCell.FormulaR1C1 = ThisWorkbook.Sheets("Thierry").Range("A" & i).Value
Je cherche mais je ne trouve pas la panne !
A savoir que j'ai juste fait un copier colle du code et en seule modif j'ai juste indiqué le chemin d'accès pour l'enregistrement.
Chemin = "C:\monchemin\dossier"
Thierry
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
30 juin 2008 à 11:47
Comment s'appelle la feuille qui contient ta liste de noms et de titres ?
remplace "Thierry" par le nom de cette feuille dans Sheets("Thierry")
A suivre...
0
Rebonjour,
Cette feuille s'appelle "essai". J' ai changé Sheets("Thierry") par Sheets("essai") mais toujours le meme message d'erreur.
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
30 juin 2008 à 15:07
dernière chance : la macro est-elle bien dans le classeur qui contient la feuille "essai" ?
sinon, essaie avec
ActiveCell.FormulaR1C1 =  _ 
    Workbooks("nomduclasseurquicontientlafeuilleEssai").Sheets("essai").Range("A" & i).Value
0
Yeeeeees, ca fonctionne super ... Tu as bien vu, je confondait tout betement feuille et classeur.
Mille merçi et bravo pour les competences.
Je reviendrai bientot vers toi si tu veux bien pour un dernier petit détail.
Bonne soirée.
Thierry
0
ReBonjour Ivan-hoe,
Peux tu m'aider encore une fois, le code que tu m'a donné fonctionne très bien, c'est exactement ce que je voulais. Cependant il ne faut pas qu'il y ai de doubles guillemets, en effet si j'ai un double guillemet dans une cellule cela doublera ce double guillemet a l'affichage et génèrera de plus un double guillemet en début de page et en fin de la page.
Désolé pour les répétitions, ce sera plus clair avec cet exemple.
Ex : La famille "Dupont" de paris
Devient : "La famille ""Dupont"" de paris"
Ce qui est ennuyeux si il y a des cellules avec des liens par ex.

Autre point que je cherche à résoudre : Lors de l' enregistrement créer un répertoire dont le nom est indiqué dans une cellule.
Ex : J'ai "Dupont" en C1
Je voudrais que le dossier "Dupont" se crée et ma feuille sera enregistrée dedans.
Chemin = "C:\mesdocuments\Dossiergenaral\Dupont\fichier.txt"
Remerciements
Thierry
0
Bonjour,
J'ai besoin de votre aide encore une fois, le code que tu m'a donné fonctionne très bien, c'est exactement ce que je voulais. Cependant il ne faut pas qu'il y ai de doubles guillemets, en effet si j'ai un double guillemet dans une cellule cela doublera ce double guillemet a l'affichage et génèrera de plus un double guillemet en début de page et en fin de la page.
Désolé pour les répétitions, ce sera plus clair avec cet exemple.
Ex : La famille "Dupont" de paris
Devient : "La famille ""Dupont"" de paris"
Ce qui est ennuyeux si il y a des cellules avec des liens par ex.
Y a t'il un solution pour remédier à cela ?


Autre point que je cherche à résoudre : Lors de l' enregistrement créer un répertoire dont le nom est indiqué dans une cellule.
Ex : J'ai "Dupont" en C1
Je voudrais que le dossier "Dupont" se crée et ma feuille sera enregistrée dedans.
Chemin = "C:\mesdocuments\Dossiergenaral\Dupont\fichier.txt"
Remerciements
Thierry
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
11 juil. 2008 à 16:58
Salut Thierry,
pour le coup des doubles-guillemets, je ne saisis pas bien le contexte. Peux-tu mettre une copie de ton fichier (sans donnée confidentielle) sur www.cijoint.fr ? ça sera plus parlant avec un exemple sous les yeux.
Peut-être que la fonction Replace permettrait de supprimer les guillemets en trop ? (remplacer " par rien)

Pour la création de dossier, regarde dans l'aide VBA l'instruction MkDir
Par exemple (à titre indicatif, non testé) :
Chemin = "C:\mesdocuments\Dossiergeneral\"
NouveauDossier = Sheets("NomFeuille").Range("C1").Value
MkDir Chemin & NouveauDossier
Chemin = Chemin & NouveauDossier & "\"

A suivre...
0