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
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
A voir également:
- Aide pour une macro d'excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Calculer une moyenne sur excel - Guide
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
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
Pour aller chercher le titre dans A1 du classeur initial, tu la remplaces par
De même, tu devrais trouver une ligne
Pour aller chercher le nom de fichier dans B1 du classeur initial, tu la remplaces par
(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...
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...
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
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
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
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...
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
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
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
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
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...
remplace "Thierry" par le nom de cette feuille dans Sheets("Thierry")
A suivre...
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
30 juin 2008 à 15:07
dernière chance : la macro est-elle bien dans le classeur qui contient la feuille "essai" ?
sinon, essaie avec
sinon, essaie avec
ActiveCell.FormulaR1C1 = _ Workbooks("nomduclasseurquicontientlafeuilleEssai").Sheets("essai").Range("A" & i).Value
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
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
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
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
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
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é) :
A suivre...
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...
28 juin 2008 à 11:46