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 20/11/2010, 15h51   #1
Invité de passage
 
Guy
Inscription : novembre 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : Guy
Âge : 52
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 4
Points : 0
Points : 0
Par défaut Macro pour traitement de texte en serie

Bonjour,
Je me tourne vers ce forum pour trouver une solution à mon problème.
J'ai une tache répétitive à faire sous Word avec des fichiers .rtf, changer une valeur et copier 2 valeurs sur deux nouvelles lignes et ceci x fois sur des listings de plus de 150 pages. Voici un exemple :
J'ai ça :
CYCLE800(1,0,54,0,60,0,90,15,0,0,0,0,-1)

et j'aimerais avoir ça :
CYCLE800(1,0,54,0,60,0,90,15,0,0,0,0,0)
A15
C90
G4 F3

A savoir, le "-1" doit être remplacé par "0" et récupérer la valeur 15 pour l'affecter sur une nouvelle ligne précédé de "A" de même pour la valeur "90" qui sera précédé de la lettre C. La ligne sous le C doit être créée et est une valeur fixe.
Les valeurs 15 et 90 sont variables et peuvent se situer entre 0 et 360 avec 3 chiffres après la virgule et toujours en position 7 et 8 entre les parenthèses.
Si quelqu’un de ce forum pourrait me créer une macro pour word, cela me rendrait un grand service ou me conseiller sachant que j’ai aucune notion de programmation.

Guy
hgm68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2010, 22h03   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 298
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 298
Points : 29 030
Points : 29 030
Salut,

Tu nous dis trois chiffres après la virgule, laquelle ?
Citation:
CYCLE800(1,0,54,0,60,0,90,15,0,0,0,0,-1)
__________________
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 21/11/2010, 00h33   #3
Modérateur
 
Avatar de l_autodidacte
 
Homme Moncef
Directeur de lycée
Inscription : juillet 2009
Messages : 1 065
Détails du profil
Informations personnelles :
Nom : Homme Moncef
Âge : 56
Localisation : Tunisie

Informations professionnelles :
Activité : Directeur de lycée
Secteur : Enseignement

Informations forums :
Inscription : juillet 2009
Messages : 1 065
Points : 1 893
Points : 1 893
Envoyer un message via Skype™ à l_autodidacte
Citation:
Les valeurs 15 et 90 sont variables et peuvent se situer entre 0 et 360 avec 3 chiffres après la virgule et toujours en position 7 et 8 entre les parenthèses.
__________________
Je me casse la tête avec mon PC qui me tape sur les nerfs!
MAIS A cœur vaillant rien d'impossible
l_autodidacte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 08h51   #4
Invité de passage
 
Guy
Inscription : novembre 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : Guy
Âge : 52
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 4
Points : 0
Points : 0
Bonjour,

En fait, ce sont des degrés et c'est une ligne de commande d'une machine outils à commande numérique. Je disais après la virgule, mais en réalité, les chiffres sont par exemple : 15.853
ce qui équivaut à 15 degré et 853 millième de degré
La machine connait 360000 points
15.853 = 15°51'10"

Guy
hgm68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 13h50   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 298
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 298
Points : 29 030
Points : 29 030
Salut,

Si tu mettais un vrai morceau de 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 21/11/2010, 14h25   #6
Invité de passage
 
Guy
Inscription : novembre 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : Guy
Âge : 52
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 4
Points : 0
Points : 0
Ok, je vous mettrais ça lundi soir
Merci à vous

Guy
hgm68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 01h09   #7
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 405
Points : 3 405
Salut Hgm68


Un petit tuto sur les remplacements globaux (pour bien comprendre le code qui suit).

Voici une application du tuto adaptée à ton cas. Attention, tu nous as dit que les composantes 7 et 8 de ton vecteur étaient des variables comprises entre 0 et 360, et avec ton exemple, j'en ai déduit que les autres sont fixes (CYCLE800, par exemple) et séparés par des virgules sans espaces ==> voilà le code qui fonctionne sur cette base (sinon tu devrais pouvoir l'adapter à l'aide du tuto).

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
Sub RemplacerCodeMachineOutils()
    '// On va en début de document
    Selection.HomeKey Unit:=wdStory
 
    '// On remplace sans traiter les retours chariots
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = _
            "CYCLE800[(]1,0,54,0,60,0,([0-9]{1;3}),([0-9]{1;3}),0,0,0,0,-1[)]"
        .Replacement.Text = _
            "CYCLE800(1,0,54,0,60,0,\1,\2,0,0,0,0,0)$$$A\2$$$C\1$$$G4 F3"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
 
    '// On traite les retours chariots
    With Selection.Find
        .Text = "$$$"
        .Replacement.Text = "^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Attention, juste quelques remarques :
  1. On utilise 2 remplacements globaux car les recherches génériques de Word ne traitent pas le changement de ligne (<=> retour chariot) alors que les expressions standards le font mais ne traitent pas les expressions régulières de blocs complexes mais comme Word fait les 2 ==> 2 remplacements dans Word
  2. Si tu as d'autres composantes variables, n'essaie pas de remplacer toutes les remplacer par des blocs de recherche complexes (du style "([0-9]{1;3})") car tu es limité en complexité des expressions régulières

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 17h17   #8
Invité de passage
 
Guy
Inscription : novembre 2010
Messages : 4
Détails du profil
Informations personnelles :
Nom : Guy
Âge : 52
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 4
Points : 0
Points : 0
Merci Sepia,

Tout d'abord une petite erreur sur ma ligne du CYCLE800, voilà la bonne :
CYCLE800(1,"TBE",0,54,0,60,0,90,15,0,0,0,0,-1)

On m'a donné la solution. Je vous fait un copier coller de la macro.

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
71
72
73
Sub CorrectionAuto()
 
 
Selection.Find.Text = "CYCLE800"
While Selection.Find.Execute
Selection.MoveRight
 
Selection.MoveEnd Unit:=wdLine, Count:=1
Dim c As String
 
c = Mid(Selection.Text, 1, Len(Selection.Text))
 
 
If Len(c) > 7 Then
Selection.InsertParagraphAfter
'remplacement du -1 par 0
If Mid(c, Len(c) - 4, 2) = "-1" Then
c = Mid(c, 1, Len(c) - 5) & "0)"
Selection.TypeText Text:=c
End If
 
Dim a As String
Dim b As String
Dim i As Integer 'compteur des valeurs du cycle
Dim j As Integer 'compteur des positions dans le texte
Dim taille As Integer
i = 1
j = 1
a = ""
b = ""
While i < 10
    If Mid(c, j, 1) = "," Then
        i = i + 1
    End If
    If i = 8 And a = "" Then
        taille = 0
        While Mid(c, j + 1 + taille, 1) <> ","
            taille = taille + 1
        Wend
        a = Mid(c, j + 1, taille)
    End If
    If i = 9 And b = "" Then
        taille = 0
        While Mid(c, j + 1 + taille, 1) <> ","
            taille = taille + 1
        Wend
        b = Mid(c, j + 1, taille)
    End If
    j = j + 1
Wend
 
Selection.Find.Text = "D1"
Selection.Find.Execute
Selection.MoveRight
Selection.InsertParagraphAfter
Selection.EndOf
Selection.TypeParagraph
Selection.TypeText Text:="A" & b
Selection.TypeParagraph
If Val(a) < 0 Then
    a = Val(a) + 360
End If
Selection.TypeText Text:="C" & a
Selection.TypeParagraph
Selection.TypeText Text:="G4 F3"
Selection.TypeParagraph
Selection.TypeParagraph
End If
Selection.EndOf
Selection.Find.Text = "CYCLE800"
Wend
 
End Sub
Merci à tous d'avoir été à mon écoute

Guy
hgm68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 23h29   #9
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 405
Points : 3 405
Salut HGM68,

Très bien.

Maintenant il te reste juste à cliquer sur pour les autres DVPnautes sachent qu'une solution existe (sans avoir à aller regarder le contenu de tous les messages).

@+
Sepia 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 19h46.


 
 
 
 
Partenaires

Hébergement Web