OVH Cloud OVH Cloud

VBA trop costaud pour moi !

20 réponses
Avatar
AB
Hello,

J'ai un fichier dans lequel on ne trouve que des paragraphes qui se
présentent comme suit :
Fxxxxx (où xxxxx désigne des chiffres, toujours 5 chiffres après le "F")
Il y a environ 300 paragraphes.
Je voudrais pouvoir extraire chaque paragraphe, et en faire un fichier Word
autonome, dont le nom serait Fxxxxx (ce qui me ferait 300 documents
Fxxxxx.doc différents).
Sans macro, point de salut. Mais ça dépasse de beaucoup mes (très) modestes
compétences.
Si une bonne âme est susceptible de se pencher sur le problème, je l'en
remercie par avance.
AB

10 réponses

1 2
Avatar
Anacoluthe
Bonjour André !

'AB' nous a écrit ...
J'ai un fichier dans lequel on ne trouve que des paragraphes qui se
présentent comme suit :
Fxxxxx (où xxxxx désigne des chiffres, toujours 5 chiffres après le "F")
Il y a environ 300 paragraphes.
Je voudrais pouvoir extraire chaque paragraphe, et en faire un fichier Word
autonome, dont le nom serait Fxxxxx (ce qui me ferait 300 documents
Fxxxxx.doc différents).
Sans macro, point de salut. Mais ça dépasse de beaucoup mes (très) modestes
compétences.
Si une bonne âme est susceptible de se pencher sur le problème, je l'en
remercie par avance.


Est-ce que l'algorithme suivant te conviendrait :
Pour chaque paragraphe du document (for each P in AD.Paragraphs)
- copier le paragraphe (P.Range.Copy)
- créer un nouveau document (Documents.Add)
- y coller le paragraphe (Selection.Paste)
- enregistrer le nouveau document en lui donnant pour nom
le premier mot (AD.SaveAs name:­.Word(1))
puis le fermer (AD.Close)
passer au paragraphe suivant (Next P)
(AD = ActiveDocument)

Si oui, tu devrais y arriver.
Si non, il nous manque un détail ;-)

Anacoluthe
« Tout problème simple a une solution complexe...
qui ne fonctionne pas. »
- Olivier LOCKERT

Avatar
AB
Bonsoir "Anacoluthe",
Je savais que tu te pencherais volontiers sur le problème, et je t'en
remercie.
Ton algorithme conviendrait très bien si j'avais bien exposé le problème.
Malheureusement, ce n'est pas le cas, je me suis très mal exprimé, et j'en
suis confus (et ça me montre encore, s'il en était besoin, que la réflexion
des copains permet de clarifier la mienne).
En fait, on ne peut pas se baser véritablement sur la notion de paragraphe,
car entre deux séquences du type Fxxxxx, il peut y avoir plusieurs
paragraphes.
L'entité que je cherche à isoler est donc le texte qui sépare les deux
séquences de caractères "Fxxxxx".
Je ne sais pas si c'est bien clair.
Il me faudrait faire une macro qui :
1/ parcoure le fichier,
2/ repère une séquence Fxxxxx et la stocke dans une variable "V"
3/ sélectionne cette séquence et tout le texte qui suit jusqu'à la prochaine
séquence Fxxxxx (sans inclure cette dernière dans la sélection)
4/ crée un nouveau document, y colle la sélection, et le sauvegarde en le
nommant "V"
5/ recommence le processus à partir de la séquence Fxxxxx suivante, jusqu'à
la fin
Ca devient beaucoup plus coton, je le crains...
André

"Anacoluthe" a écrit dans le message de news:
u%
Bonjour André !

'AB' nous a écrit ...
J'ai un fichier dans lequel on ne trouve que des paragraphes qui se
présentent comme suit :
Fxxxxx (où xxxxx désigne des chiffres, toujours 5 chiffres après le "F")
Il y a environ 300 paragraphes.
Je voudrais pouvoir extraire chaque paragraphe, et en faire un fichier
Word autonome, dont le nom serait Fxxxxx (ce qui me ferait 300 documents
Fxxxxx.doc différents).
Sans macro, point de salut. Mais ça dépasse de beaucoup mes (très)
modestes compétences.
Si une bonne âme est susceptible de se pencher sur le problème, je l'en
remercie par avance.


Est-ce que l'algorithme suivant te conviendrait :
Pour chaque paragraphe du document (for each P in AD.Paragraphs)
- copier le paragraphe (P.Range.Copy)
- créer un nouveau document (Documents.Add)
- y coller le paragraphe (Selection.Paste)
- enregistrer le nouveau document en lui donnant pour nom
le premier mot (AD.SaveAs name:­.Word(1))
puis le fermer (AD.Close)
passer au paragraphe suivant (Next P)
(AD = ActiveDocument)

Si oui, tu devrais y arriver.
Si non, il nous manque un détail ;-)

Anacoluthe
« Tout problème simple a une solution complexe...
qui ne fonctionne pas. »
- Olivier LOCKERT



Avatar
Anacoluthe
Bonjour André !

'AB' nous a écrit ...
Ton algorithme conviendrait très bien si j'avais bien exposé le problème.


Bon, je te propose de le faire en deux temps comme ça tu seras
plus libre de l'adapter à ton problème.

Dans un premier temps tu sectionnes ton document en plaçant
des sauts de section devant tes repères de découpe :

' _____________________________________________________

Public Sub SectionneDocument()
Dim R As Range
Dim sDebutSection As String
sDebutSection = "F^#^#^#^#^#" ' F puis 5 chiffres

Selection.HomeKey unit:=wdStory
With Selection.Find
.ClearFormatting
.Text = sDebutSection
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
Set R = Selection.Range
R.Collapse wdCollapseStart
R.InsertBreak wdSectionBreakNextPage
Selection.Collapse wdCollapseEnd
Loop
End With
Set R = Nothing
End Sub
' _____________________________________________________


Ensuite si le résultat te convient, en particulier au
niveau de la 1ère section, tu enregistres chaque section
dans un document séparé.
C'est une macro classique (utilisée en publipostage notamment)
que je te modifie un peu : le nom du fichier sera composé
des 6 premiers caractères de la section cad ton Fxxxxx

' _____________________________________________________

Sub SectionsDansDocumentsSéparés()
Dim SousDoc As Document
Dim R As Range
Dim S As Section

For Each S In ActiveDocument.Sections
Set R = S.Range: R.End = R.End - 1
Set SousDoc = Documents.Add
With SousDoc
.Content = R
.SaveAs FileName:=Left(R.Text, 6)
.Close
End With
Next S

Set SousDoc = Nothing
Set R = Nothing
Set S = Nothing

End Sub
' _____________________________________________________


Bon dimanche !

Anacoluthe
« Tout problème simple a une solution complexe...
qui ne fonctionne pas. »
- Olivier LOCKERT

Avatar
AB
Merci ! Muchas Gracias ! Thanks ! Efraristo para poly !
Bon, parlons peu, parlons bien : combien de bouteilles de pastis ?
André

"Anacoluthe" a écrit dans le message de news:

Bonjour André !

'AB' nous a écrit ...
Ton algorithme conviendrait très bien si j'avais bien exposé le problème.


Bon, je te propose de le faire en deux temps comme ça tu seras
plus libre de l'adapter à ton problème.

Dans un premier temps tu sectionnes ton document en plaçant
des sauts de section devant tes repères de découpe :

' _____________________________________________________

Public Sub SectionneDocument()
Dim R As Range
Dim sDebutSection As String
sDebutSection = "F^#^#^#^#^#" ' F puis 5 chiffres

Selection.HomeKey unit:=wdStory
With Selection.Find
.ClearFormatting
.Text = sDebutSection
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute
Set R = Selection.Range
R.Collapse wdCollapseStart
R.InsertBreak wdSectionBreakNextPage
Selection.Collapse wdCollapseEnd
Loop
End With
Set R = Nothing
End Sub
' _____________________________________________________


Ensuite si le résultat te convient, en particulier au
niveau de la 1ère section, tu enregistres chaque section
dans un document séparé.
C'est une macro classique (utilisée en publipostage notamment)
que je te modifie un peu : le nom du fichier sera composé
des 6 premiers caractères de la section cad ton Fxxxxx

' _____________________________________________________

Sub SectionsDansDocumentsSéparés()
Dim SousDoc As Document
Dim R As Range
Dim S As Section

For Each S In ActiveDocument.Sections
Set R = S.Range: R.End = R.End - 1
Set SousDoc = Documents.Add
With SousDoc
.Content = R
.SaveAs FileName:=Left(R.Text, 6)
.Close
End With
Next S

Set SousDoc = Nothing
Set R = Nothing
Set S = Nothing

End Sub
' _____________________________________________________


Bon dimanche !

Anacoluthe
« Tout problème simple a une solution complexe...
qui ne fonctionne pas. »
- Olivier LOCKERT



Avatar
Geo
Bonjour à tous

C'est une épidémie ou mon OE qui est en grève ? je ne vois pas la réponse
d'AB :

Ton algorithme conviendrait très bien si j'avais bien exposé le
problème.



Ca arrive de plus en plus fréquemment malgré une réinitialisation du forum.
Si vous avez un bon lecteur de forum à me conseiller, ne vous privez pas !

--

A+


Avatar
Circé
Hello Geo,

Geo a exposé le 25/09/2005 :
Bonjour à tous

C'est une épidémie ou mon OE qui est en grève ?

Ca arrive de plus en plus fréquemment malgré une réinitialisation du
forum.
Si vous avez un bon lecteur de forum à me conseiller, ne vous privez
pas !


Ça fait longtemps que j'ai abandonné OE, pour tous ces types de
problèmes ! :s

Perso, j'utilise MesNews que je trouve parfait pour moi, certains
préfèrent Thunderbird. J'ai testé les deux, chacun a ses
spécificités...
MesNews te donne des stats immédiatement (je sais que tu aimes les
stats ;-) !!)

Circé
http://faqword.free.fr

Avatar
Geo
Bonjour Circé


Si vous avez un bon lecteur de forum à me conseiller, ne vous privez
pas !


Ça fait longtemps que j'ai abandonné OE, pour tous ces types de
problèmes ! :s

Perso, j'utilise MesNews que je trouve parfait pour moi, certains
préfèrent Thunderbird. J'ai testé les deux, chacun a ses
spécificités...


Et tu lis les courriels privés avec,
ou tu as un outil pour chaque type de message ?


--

A+


Avatar
JièL Goubert
Bonjoir(c) Geo

Le 25/09/2005 13:17 vous avez écrit ceci :
Perso, j'utilise MesNews que je trouve parfait pour moi, certains
préfèrent Thunderbird. J'ai testé les deux, chacun a ses
spécificités...



Et tu lis les courriels privés avec,
ou tu as un outil pour chaque type de message ?


MesNews est exclusivement un lecteur de news, Thunderbird fait les 2 et
intègre un superbe antispam...

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/


Avatar
Geo
Bonjour JièL Goubert


Et tu lis les courriels privés avec,
ou tu as un outil pour chaque type de message ?



MesNews est exclusivement un lecteur de news, Thunderbird fait les 2 et
intègre un superbe antispam...


Et il reprend la pile de messages envoyés ou reçus que j'ai conservés ?
Pour les pourriels, depuis que j'ai changé d'adresse et conservé la
nouvelle secrète, je ne suis plus trop embêté.
Les seuls que je reçoive sont en allemand que je lis encore moins que
l'anglais, le tri est donc vite fait :-)

--

A+



Avatar
JièL Goubert
Bonjoir(c) Geo

Le 25/09/2005 13:40 vous avez écrit ceci :
MesNews est exclusivement un lecteur de news, Thunderbird fait les 2 et
intègre un superbe antispam...



Et il reprend la pile de messages envoyés ou reçus que j'ai conservés ?


Yes, même ceux d'Outlook (je viens de vérifier), voire il importe aussi
les contacts

Les seuls que je reçoive sont en allemand


y viennent pas de Strasbourg par zarard ? ;-)))))))

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/


1 2