Aide VBA sur Word

hypo78

XLDnaute Impliqué
Bonjour à tous,

tout d'abord, je vous présente mes meilleurs voeux pour cette nouvelle année.

En lisant le titre de mon post vous devez vous dire que je suis hors sujet, mais existe-il un équivalent à ExcelDownload en version Word?? Le moteur de recherche ne me trouve rien de terrible...

Donc au cas où : j'ai un fichier Word. Après avoir saisi quelques données je dois le sauvegarder autant de fois qu'il y a de jours dans le mois concerné.

Le nom du fichier doit être sous la forme : 120201_modèle_01022012.doc

Avec ce code j'arrive à sauvegarder sous la forme 20120201_modèle_01022012.doc

Code:
Sub Creation_doc_mois()

    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    
    Année = InputBox("Saisir l'année sous la forme aaaa")
    Mois = InputBox("Saisir le mois à créer sous la forme mm")
    Jours = InputBox("Saisir le nombre de jours dans le mois")
  
    
    With ActiveDocument
    For i = 1 To Jours
    ActiveDocument.SaveAs FileName:=Année & Mois & Format(i, "dd") & "_Modèle_" & Format(i, "dd") & Mois & Année & ".doc", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False
    Next i
    End With
End Sub

Je que je souhaiterais :
- supprimer le 20 (en rouge ci-dessus), j'ai essayé avec Format (Année, "yy") en vain

Bizarrement quand je lance cette macro avec les données année = 2012, mois = 02 et jours = 29 elle me crée bien 29 classeurs mais le 29 et le 30 n'existe pas on passe de 28 à 31.

Merci de votre aide ou de m'aiguiller sur un autre forum.

Cordialement.
 

JNP

XLDnaute Barbatruc
Re : Aide VBA sur Word

Bonjour le fil :),
Effectivement, il y a une partie du forum pour Word, mais là, la question est aussi valable pour Excel :rolleyes:...
Personnellement, je coderais
Code:
Année = Application.InputBox("Saisir l'année :", "Année", , , , , , 1)
If Année < 100 Then Année = 2000 + Année
Mois = Application.InputBox("Saisir le mois à créer :", "Mois", , , , , , 1)
Jours = DateAdd("m", 1, DateSerial(Année, Mois, 1)) - DateSerial(Année, Mois, 1)
MsgBox Format(DateSerial(Année, Mois, 1), "yymmdd") & "_Modèle_...)"
Application.Inputbox te permet de limiter la saisie à des nombres :rolleyes:
Pourquoi demander le nombre de jours dans le mois quand tu peux les calculer :p ?
Fonctionne évidemment que pour les années à partir de 2000 ;) !
Il te suffit bien sûr de remplacer le 1 dans
Code:
Format(DateSerial(Année, Mois, 1), "yymmdd") & "_Modèle_...)"
pour effectuer ta boucle :p...
Bonne suite :cool:
 

hypo78

XLDnaute Impliqué
Re : Aide VBA sur Word

Bonjour à tous les 2,

@JNP : je suis en débogage à chaque Application.InputBox

Je ne vois pas dans ton code ce qui va résoudre mon problème de supprimer le 20 en début de nom de fichier et mon second pb qui enregistre sous jusqu'à 28 puis passe à 31 pour le mois de février.

Merci de te pencher sur mon problème.
 

JNP

XLDnaute Barbatruc
Re : Aide VBA sur Word

Re :),
Désolé, vraiment space Microsoft, mettre une fonction VBA dans Excel et pas dans Word :mad:...
D'après msdn, il y aurait une bibliothèque microsoft.office.interop.excel.dll à ouvrir, mais je ne l'ai pas trouvé :eek:...
Mon code fonctionnera avec InputBox à la place d'Application.InputBox (en supprimant ", , , , , , 1), mais ne pourras pas vérifier du coup si les données saisies sont numériques, donc plantera si tu ne mets pas de test dans le cas ou la saisie du mois serait "février" par exemple :rolleyes:...
Bon, teste mon code sous Excel, tu comprendras mieux ce que je t'avais codé...
Sinon
Code:
DateAdd("m", 1, DateSerial(Année, Mois, 1))
décale d'un mois le premier jour du mois choisi, donc 01/01/2012 donne 01/03/2012, et entre les deux, tu n'as bien que 28 jours :p...
Enfin,
Code:
Format(DateSerial(Année, Mois, 1), "yymmdd")
donne bien 120201 pour le 1er février, sachant que c'est le 1 qui sert à dire que c'est le premier, si tu mets à la place la variable de ta boucle, tu vas bien obtenir 120201 à 120229 :rolleyes:...
Bonne suite :cool:
 

hypo78

XLDnaute Impliqué
Re : Aide VBA sur Word

Re,

Code:
Sub Creation_doc_mois()

    
    Année = InputBox("Saisir l'année sous la forme aaaa")
    Mois = InputBox("Saisir le mois à créer sous la forme mm")
    Jours = DateAdd("m", 1, DateSerial(Année, Mois, 1)) - DateSerial(Année, Mois, 1)
  
    
    With ActiveDocument
    For i = 1 To Jours
    ActiveDocument.SaveAs FileName:=Format(DateSerial(Année, Mois, i), "yymmdd") & "_Modèle_" & Format(DateSerial(Année, Mois, i), "ddmmyyyy") & ".doc", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False
    Next i
    End With
End Sub

Là çà fonctionne.

Encore une petite question : quelle ligne j'ajoute pour que la macro s'exécute dans le dossier contenant le document?
(j'ai essayé du activedocument.path, mais je ne vois pas trop où le caser....)
Cordialement
 

JNP

XLDnaute Barbatruc
Re : Aide VBA sur Word

Re :),
Code:
ActiveDocument.SaveAs FileName:=ThisDocument.Path & "\" & Format(DateSerial(Année, Mois, i), "yymmdd") & "_Modèle_" & Format(DateSerial(Année, Mois, i), "ddmmyyyy") & ".doc", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False
il me semble :rolleyes:...
Bonne suite :cool:
 

hypo78

XLDnaute Impliqué
Re : Aide VBA sur Word

Bonjour,

avec l'aide d'un autre Forum, j'ai avancé sur l'insertion d'une date dans le document créée.
Je fait référence à un Bookmarks (signet) l'équivalent d'une cellule sur Excel.

Mais voilà si je suis là c'est qu'il subsiste un petit problème et comme çà concerne du VBA, je me dis pourquoi pas ici;)

Quand la boucle se fait, elle fait référence à ActiveDocument, et le problème c'est que cet ActiveDocument au début de la boucle est mon modèle mais dès qu'on passe à i=2, çà devient mon document que l'on vient de créée. Pas de problème pour le nom des fichiers, par contre au niveau des signets çà me cumule les dates...

Une solution?

le code actuel

Code:
 Sub Creation_doc_mois()

    
    Année = InputBox("Saisir l'année sous la forme aaaa")
    Mois = InputBox("Saisir le mois à créer sous la forme mm")
    Jours = DateAdd("m", 1, DateSerial(Année, Mois, 1)) - DateSerial(Année, Mois, 1)
  
    
    With ActiveDocument
    For i = 1 To Jours
    ActiveDocument.Bookmarks(1).Range.Text = Format(DateSerial(Année, Mois, i), "dd/mm/yyyy")
    ActiveDocument.Bookmarks(2).Range.Text = Format(DateSerial(Année, Mois, i + 1), "dd/mm/yyyy")
    ActiveDocument.SaveAs FileName:=ThisDocument.Path & "\" & Format(DateSerial(Année, Mois, i), "yymmdd") & "_Modèle_" & Format(DateSerial(Année, Mois, i), "ddmmyyyy") & ".doc", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False
    Next i
    End With
End Sub

Merci d'avance
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Aide VBA!
Réponses
13
Affichages
931

Statistiques des forums

Discussions
314 611
Messages
2 111 144
Membres
111 051
dernier inscrit
MANUREVALAND