Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2011, 15h13   #1
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
Par défaut modification du style de fichiers par macro

Bonjour, tout d'abord je ne suis pas développeur donc excusez mon faible niveau en macro.

voila ma problématique (simple je trouve) je souhaite modifier la police lié au
style dans tous les fichiers d'un répertoire, après plusieurs essaies infructueux (il y a trop de fichiers si je le fais un à un la macro est trop longue) j'ai essayé une boucle, mais lol elle tourne à l'infini sur le premier fichier.

voici mon code (bon rigolez pas hein je suis vraiment débutant)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Sub test_style()
'
' test_style Macro
' Macro enregistrée le 24/08/2011 par  XXX
'
Do
     ChangeFileOpenDirectory "C:\test\"
       Documents.Open FileName:=Dir("*.doc"), ConfirmConversions:=False, _
        ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:= _
        "MARCO_MODELE_MP", PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
        wdOpenFormatAuto, XMLTransform:=""
    With ActiveDocument.Styles("Normal").Font
        .Name = "Arial"
        .Size = 10
        .Bold = False
        .Italic = False
        .Underline = wdUnderlineNone
        .UnderlineColor = wdColorAutomatic
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .Color = wdColorAutomatic
        .Engrave = False
        .Superscript = False
        .Subscript = False
        .Scaling = 100
        .Kerning = 0
        .Animation = wdAnimationNone
    End With
    With ActiveDocument.Styles("Normal")
        .AutomaticallyUpdate = True
        .BaseStyle = ""
        .NextParagraphStyle = "Normal"
    End With
    ActiveDocument.Save
    ActiveWindow.Close
Loop
End Sub
je vois où est mon erreur je ne sais pas la corriger, comment lui déclarer soit un nombre de fichier par un compteur par exemple, ou lui demander de passer au fichier suivant?
merci d'avance
alighieri27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 15h34   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 324
Points : 29 225
Points : 29 225
Salut,

Point de compteur ou autre, juste une boucle sur une collection d'objets.

http://warin.developpez.com/access/fichiers/

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Sub ParcourirRepertoire()
Dim oDoc As Document
Dim oFSO As FileSystemObject
Dim oFol As Folder
Dim oFil As File
 
Set oFSO = New FileSystemObject
Set oFol = oFSO.GetFolder("c:\temp\")
 
For Each oFil In oFol.Files
Set oDoc = Documents.Open(oFil.Name)
'Ici l'action sur le style
...
...
oDoc.Close
Next oFil
 
Set oFol = Nothing
Set oFSO = Nothing
 
 
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 15h55   #3
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
Par défaut merci mais...je suis un boulet :)

merci pour cette réponse ultra rapide,
cependant... je me retrouve avec un message d'erreur
sur la première ligne

Sub ParcourirRepertoire() (surligné en jaune dans le debogueur)

le message étant le suivant :
"erreur de compilation
type défini par l'utilisateur non défini "

euh merci en tout cas pour cette piste je vais fouiller dans cette nouvelle direction.
alighieri27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h11   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 324
Points : 29 225
Points : 29 225
Salut,

J'ai mis un lien qui explique le pourquoi du comment
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h47   #5
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
Par défaut pas mieux

bon je me demande si il ne me manque pas des composant office pour le coup
(Dao etc) car il plante toujours le code ).

je vais essayer de vérifier si il manque pas des dll Dao3032.dll par exemple...

la il ne lance pas la requête il plante sur la lecture du titre lol

je me suis embarqué je crois mais bon vu le nombre de fichier que je dois manipuler ça me paraissait plus malin d'automatiser une tâche qui serait
redondante

en tout cas je suis surpris de la vitesse des réponses !
mais je crois que je n'ai pas le niveau pour cette macro (le document
en lien n'est pas clair je ne dois pas avoir les prérequis intellectuel lol)
alighieri27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 18h42   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 324
Points : 29 225
Points : 29 225
Salut,

Le liens est un tuto sur la manipulation des fichiers.
On y utilise la bibliothèque Scripting Runtime pour pouvoir utiliser le FileSystemObject.
Partant de là, on peut travailler sur les fichiers d'un répertoire.

en faisant une boucle sur les fichiers, on peut les ouvrir un par un.

Donc, pour que ce code fonctionne, il faut ajouter au projet la référence Microsoft Scripting Runtime.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 09h49   #7
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
Par défaut hum encore moi

et bien effectivement en ajoutant cette référence la macro va un peu plus loin
malheureusement j'ai un nouveau message d'erreur

"erreur d'execution 5174
fichier introuvable
vérifier l'orthographe du nom du document
(nom du fichier correct)

il m'affiche bien le nom du premier fichier entre parenthèse du coup
il le trouve bien

dans le debogueur cette ligne est surligné
Code :
Set oDoc = Documents.Open(oFil.Name)
alighieri27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h03   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 324
Points : 29 225
Points : 29 225
Salut,

J'ai donné ce code qui fonctionne pour récupérer le nom des fichier, mais il faut le combiner avec le code que tu possèdes déjà.

La ligne ChangeOpenFileDirectory aurait du permettre l'ouverture du fichier.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h24   #9
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
Par défaut presque

donc après ces explications la macro tourne (si si malgré ma boulétude)
cependant il me demande désormais le mot de passe à chaque fichier
commande qui est dans mon code un peu plus loin néanmoins...

voici mon code actuel


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Sub ParcourirRepertoire()
Dim oDoc As Document
Dim oFSO As FileSystemObject
Dim oFol As Folder
Dim oFil As File
 
Set oFSO = New FileSystemObject
Set oFol = oFSO.GetFolder("c:\test\")
 
For Each oFil In oFol.Files
Set oDoc = Documents.Open(oFil.Name)
'Ici l'action sur le style
ChangeFileOpenDirectory "C:\test\"
Documents.Open FileName:=Dir("*.doc"), ConfirmConversions:=False, _
        ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:= _
        "MARCO_MODELE_MP", PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
        wdOpenFormatAuto, XMLTransform:=""
    With ActiveDocument.Styles("Normal").Font
        .Name = "Arial"
        .Size = 10
        .Bold = False
        .Italic = False
        .Underline = wdUnderlineNone
        .UnderlineColor = wdColorAutomatic
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .Color = wdColorAutomatic
        .Engrave = False
        .Superscript = False
        .Subscript = False
        .Scaling = 100
        .Kerning = 0
        .Animation = wdAnimationNone
    End With
    With ActiveDocument.Styles("Normal")
        .AutomaticallyUpdate = True
        .BaseStyle = ""
        .NextParagraphStyle = "Normal"
    End With
    ActiveDocument.Save
 
 
oDoc.Close
Next oFil
 
Set oFol = Nothing
Set oFSO = Nothing
 
End Sub
dernière chose après le 3e fichier il me rouvre le premier et le laisse dans une fenetre word supplémentaire (mais bon c'est pas trop génant si le traitement du stye est bien effectué la je chipotte )

merci en tout cas (au pire je saisirais le mot de passe en copiant collant
alighieri27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 14h57   #10
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 324
Points : 29 225
Points : 29 225
Salut,

Tu ouvres deux fois le document, une fois sans mot de pas et une fois avec.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 15h40   #11
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
Par défaut en effet

oui j'ouvre deux fois le fichier (la deuxième avec le mot de passe)
mais je n'arrive pas à comprendre la syntaxe qui me permettrais d'insérer

Code :
PasswordDocument:= _"MARCO_MODELE_MP"
dans la partie que tu m'as fourni ça provoque des erreurs sinon j'aurais supprimé cette parti ci :

Code :
1
2
3
4
5
Documents.Open FileName:=Dir("*.doc"), ConfirmConversions:=False, _
        ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:= _
        "MARCO_MODELE_MP", PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
        wdOpenFormatAuto, XMLTransform:=""
si j'avais trouvé comment ouvrir avec ton code les documents sans ressaisir le mot de passe

merci en tout cas de m'aider j'avoue ça me dépanne ! (environ une centaine de fichier à modifier et ceux plusieurs fois par mois si ça fini par fonctionner ça va me faire gagner un temps fou).
alighieri27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 18h29   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 324
Points : 29 225
Points : 29 225
Salut,

Avec cette ligne :
Code :
Set oDoc = Documents.Open(oFil.Name)
j'ouvre le document et je l'affecte à l'objet document.
De cette manière, on peut faire références à tous les autres objets que ce document peut contenir.

Il suffit de compléter la ligne de code en faisant un mix avec celle que tu donne.

Code :
1
2
3
4
5
6
 
Set oDoc = Documents.Open ( FileName:=oFil.Name, ConfirmConversions:=False, _
        ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:= _
        "MARCO_MODELE_MP", PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
        wdOpenFormatAuto, XMLTransform:="")
Comme les lignes de code sont exécutées dans l'ordre où elles se trouvent, tu dois veillez à ce que certaines commandes ne soient pas au mauvais endroit comme celle-ci :
Code :
ChangeFileOpenDirectory "C:\test\"
, elle doit se trouver beaucoup plus tôt dans ta procédure.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
Sub ParcourirRepertoire()
'Déclaration des variables
'Le document et les objets FileSystem
Dim oDoc As Document
Dim oFSO As FileSystemObject
Dim oFol As Folder
Dim oFil As File
 
'Affectation des objets
Set oFSO = New FileSystemObject
Set oFol = oFSO.GetFolder("c:\test\")
'Changement du répertoire d'ouverture des documents
'On peut s'en passer si on ajoute au nom du fichier le répertoire
ChangeFileOpenDirectory "C:\test\"
 
'Boucle sur tous les fichiers du répertoire
For Each oFil In oFol.Files
Set oDoc = Documents.Open(oFil.Name)
'On devrait faire un tri sur le type de fichier
'Si l'extension du fichier est .doc on l'ouvre
If Right(oFil.Name, 3 ) = "doc" Then 
 
'Ouverture du document avec son affectation à l'objet oDoc
Set oDoc = Documents.Open (FileName:= oFil.Name, ConfirmConversions:=False, _
        ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:= _
        "MARCO_MODELE_MP", PasswordTemplate:="", Revert:=False, _
        WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
        wdOpenFormatAuto, XMLTransform:="")
'Ici l'action sur le style
'Comme le document sur lequel nous travaillons est oDoc
    With oDoc.Styles("Normal").Font
        .Name = "Arial"
        .Size = 10
        .Bold = False
        .Italic = False
        .Underline = wdUnderlineNone
        .UnderlineColor = wdColorAutomatic
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .Color = wdColorAutomatic
        .Engrave = False
        .Superscript = False
        .Subscript = False
        .Scaling = 100
        .Kerning = 0
        .Animation = wdAnimationNone
    End With
    With oDoc.Styles("Normal")
        .AutomaticallyUpdate = True
        .BaseStyle = ""
        .NextParagraphStyle = "Normal"
    End With
'Au lieu de sauver et de fermer, on ferme en sauvant
oDoc.Close SaveChanges:=True
End if
'Le fichier suivant
Next oFil
 
'Libération des objets
Set oFol = Nothing
Set oFSO = Nothing
 
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h23.


 
 
 
 
Partenaires

Hébergement Web