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 03/06/2007, 10h22   #1
Invité de passage
 
Inscription : mai 2007
Messages : 13
Détails du profil
Informations personnelles :
Âge : 63

Informations forums :
Inscription : mai 2007
Messages : 13
Points : 1
Points : 1
Par défaut Variables et Selection

Bonjour
N'ayant pas eu de réponse à une précédente demande d'aide, je me permets de reposer ma question sous une autre forme :


Dans un fichier texte, comment récupérer le premier caractère d'un paragraphe et le mettre dans une variable. Le but est de pouvoir ensuite traiter ce paragraphe : si ma variable = "A" faire ceci, si ma variable = "C" faire cela , etc ...

Merci de votre aide
arctos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2007, 12h52   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Code :
1
2
3
4
5
6
7
8
Sub chercherTrouvé()
For Each Para In ActiveDocument.Paragraphs
      If Left(Para.Range.Text, 1) = "C" Then
           Para.Range.Select
           MsgBox "Trouvé !"
      End If
Next
End Sub
Mais si tu ne nous dis pas ce que tu fais une fois trouvé, on sera coincé ici
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2007, 13h11   #3
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
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 351
Points : 29 264
Points : 29 264
A la place d'un If, je ferais un select case.
__________________
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 03/06/2007, 15h32   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Très juste... Heu... Oli !
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 17h34   #5
Invité de passage
 
Inscription : mai 2007
Messages : 13
Détails du profil
Informations personnelles :
Âge : 63

Informations forums :
Inscription : mai 2007
Messages : 13
Points : 1
Points : 1
Par défaut Variables et selection

Excusez moi de ne pas avoir répondu plus tôt pour cause d'absence.

Le problème est le suivant : j'ai habituellement un fichier texte de 120 000 lignes qui se présente ainsi :
A130789274559523243_1169079935035700011001 0114071969131012007310120070000000000000000000002900000017400000000000000000000000000000000
C130789274_169079935035700007000031012007AMI 01000100010000290000029006000001740000290000000
A130789274559661316_1178081320400000011001 0115081978111012007110120070000000000000000000020250000121500000000000000000000000000000000
C130789274_178081320400000007000011012007B 01000500010000027000013506000000810000135000000

J'ai mis un souligné à la place de l'espace.
Si la ligne commence par A, je veux sélectionner les caractères 11 à 19 et les coller à la même place dans la ligne C. Le reste des lignes ne change pas.
Avant traitement :
A130789274559523243_
C130789274_
et après traitement :
A130789274559523243_
C130789274559523243_

Merci de votre aide.
arctos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 18h08   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
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 351
Points : 29 264
Points : 29 264
C'est pas un collage, mais une insertion.

Es-tu certain que word est le programme idéal ?
120 000 lignes, ça te fais un fichiers de quelle taille ?

Sérieusement, as tu pensé que d'autres soft sont mieux équipé pour ce genre de traitement.
Je pense à Access qui est une logiciel fait pour gérer des données.
__________________
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 07/06/2007, 18h31   #7
Invité de passage
 
Inscription : mai 2007
Messages : 13
Détails du profil
Informations personnelles :
Âge : 63

Informations forums :
Inscription : mai 2007
Messages : 13
Points : 1
Points : 1
Par défaut Variables et selection

Oui ça me fait des fichiers énormes (actuellement 15833 ko)qui sont crachés par un logiciel administratif qui ne me donne pas le choix sur le type de sorties.
Actuellement, je récupère le fichier texte de sortie, et je le bidouilleavec word pour insérer des espaces.Ensuite je le coupe en fichiers plus petits avec un outil appelé yoyo cut..
J'importe chaque fichier dans excel en trois colonnes. En faisant atteindre les cellules vides puis copier la ligne du dessus si la cellule est vide, j'arrive à insérer ma séquence de texte au bon endroit.
J'exporte en CSV.
Pour terminer, avec Word, je supprime les ; de chaque fichier et je recolle tous mes fichiers en un seul fichier texte.
Je peux alors importer ce fichier dans une base access.

C'est assez fastidieux, d'autant que mon fichier d'origine se rallonge chaque semaine.
C'est pourquoi j'avais pensé à une macro dans Word. Je ne suis pas fermé à une autre solution si il y a.
arctos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 18h59   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
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 351
Points : 29 264
Points : 29 264
Si c'est pour finir dans Access, ne passe pas par Word, fait tes traitement en Access directement.
120000 lignes à chaque sortie, tu fais quoi avec autant de lignes ?
J'espère que ta sortie n'est pas quotidienne.

Pose ta question sur le forum Access !
__________________
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 07/06/2007, 19h07   #9
Invité de passage
 
Inscription : mai 2007
Messages : 13
Détails du profil
Informations personnelles :
Âge : 63

Informations forums :
Inscription : mai 2007
Messages : 13
Points : 1
Points : 1
Par défaut Variables et selection

Je n'ai pas de difficulté (du moins je ne crois pas) pour importer un fichier texte dans Access.
Mon problème c'est que j'ai besoin de traiter les lignes "C" et que le seul moyen de relier les différentes lignes "C" est la séquence que je veux extraire des lignes "A".
En gros, la ligne "A" me donne la reference d'une facture et chaque ligne "C" traite un détail de cette facture.
arctos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 19h36   #10
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
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 351
Points : 29 264
Points : 29 264
Tu fais le traitement en DAO avec des recordset et tu va gagner en vitesse et éviter ces manipulations.

Avec le DAO, tu vas parcourir le enregistrement, et pour chaque enregistrement A...... tu vas avoir une variable que tu va pouvoir insérer dans les enregistrements C....... jusqu'au prochain A
__________________
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 07/06/2007, 20h13   #11
Invité de passage
 
Inscription : mai 2007
Messages : 13
Détails du profil
Informations personnelles :
Âge : 63

Informations forums :
Inscription : mai 2007
Messages : 13
Points : 1
Points : 1
Par défaut Variables et Selection

C'est une piste dont je ne soupçonnais même pas l'existence. Je vais commencer à étudier la question.
En tous cas, merci pour tout.
arctos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 20h31   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
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 351
Points : 29 264
Points : 29 264
Si tu veux un endroit où prendre des information sur le DAO, Tofalu a fait un tuto qui vaut le détour.

http://warin.developpez.com

Je te le conseille.
__________________
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 09/06/2007, 19h11   #13
Invité de passage
 
Inscription : mai 2007
Messages : 13
Détails du profil
Informations personnelles :
Âge : 63

Informations forums :
Inscription : mai 2007
Messages : 13
Points : 1
Points : 1
Par défaut Variables et Selection

Bonsoir
Après divers essais et erreurs, j'ai réussi à écrire une macro qui marche . Je ne sais pas si elle est très bien construite mais elle me dépanne.

Si cela peut intéresser quelqu'un, la voici :

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
Sub Analyse_v2()
'  Macro enregistrée le 09/06/07 par Arctos
 Dim i As Integer, j As Integer
 'i est le nombre de paragraphes du texte
i = ActiveDocument.Paragraphs.Count
MsgBox (i) & " paragraphes à traiter"
'On se place en début de document
    Selection.HomeKey Unit:=wdStory
Dim plage As Range
Dim mtype As String
'debut de la boucle qui va traiter chaque paragraphe
j = 1
While j < ActiveDocument.Paragraphs.Count
'Récupération du 1er caractère pour analyse
Set plage = ActiveDocument.Paragraphs(j).Range
mtype = Left(plage, 1)
'Analyse
If mtype = "A" Then
'Si "A" on copie un morceau et on va en début du paragraphe suivant
Selection.MoveLeft Unit:=wdSentence
    Selection.MoveRight Unit:=wdCharacter, Count:=10
    Selection.MoveRight Unit:=wdCharacter, Count:=10, Extend:=wdExtend
    Selection.Copy
Selection.MoveRight Unit:=wdSentence
Selection.MoveRight Unit:=wdCharacter
Else
'Sinon on avance, on colle et on va au debut du paragrahpe suivant
    Selection.MoveRight Unit:=wdCharacter, Count:=10
  Selection.MoveRight Unit:=wdCharacter, Count:=7, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Paste
    Selection.MoveRight Unit:=wdSentence
Selection.MoveRight Unit:=wdCharacter
End If
'on incremente j et on recommence
j = j + 1
    Wend
    'Message de fin
    MsgBox "Terminé"
End Sub
Cordialement,
arctos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 19h21   #14
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
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 351
Points : 29 264
Points : 29 264
En regardant d'un peu plus près,
Il n'est pas utile de faire cette transformation, il y a des séquences identiques dans chaque ligne.

Avec une simple requête, on peut faire ce que l'on veut.

Merci pour la Macro.
__________________
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 09/06/2007, 19h40   #15
Invité de passage
 
Inscription : mai 2007
Messages : 13
Détails du profil
Informations personnelles :
Âge : 63

Informations forums :
Inscription : mai 2007
Messages : 13
Points : 1
Points : 1
Par défaut Variables et Selection

Je n'ai pas trouvé. Si tu me montres je suis preneur.
arctos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 21h23   #16
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
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 351
Points : 29 264
Points : 29 264
Cette séquence

1169079935035700011001 0114071969131012007 de la première ligne, on la retrouve aussi dans la ligne commençant par C qui suit, mais plus dans la suivante.

Je pense qu'elle date du 31/01/2007

Pour extraire ces séquences, on peut utiliser
Code :
1
2
3
Left()
Mid()
Right()
En connaissant le but, ce serait plus simple.

Les lignes A et C n'ont pas la même longueur alors que toutes les A sont de même longueur, ainsi que toutes les C.

Pour info, combien de temps tourne ta macro sur 120000 lignes ?
__________________
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é Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h30.


 
 
 
 
Partenaires

Hébergement Web