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 28/08/2006, 10h32   #1
Invité de passage
 
Inscription : août 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 20
Points : 3
Points : 3
Par défaut [VBA-W]Trouver TOUTES couleur sauf le noir ?

Bonjour à tous !

Je cherche à baliser via un chercher remplacer tout les mots de couleur dans un texte (peu importe la couleur). Au final, j'ai besoin que tout ce qui n'est pas noir soit l'objet de ma recherche...

Je n'ai pas trouvé d'instruction pour faire comme dans ce pseudo-code:
Code :
1
2
 
Si couleur du texte ='pas noir' alors sélectionne le...
Une idée ?

Merci d'avance !
(je cherche une solution qui fonctionnerait idéalement sur mac et pc...)
kitcreanet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 10h38   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
et ton texte il est écrit ou ..? sur un bipMap...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 11h47   #3
Invité de passage
 
Inscription : août 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 20
Points : 3
Points : 3
Par défaut Oooops !!!

Effectivement, une précision s'impose ;-)
Je dois effectuer cette recherche sur Microsoft Word ;-)

Mille excuses, la prochaine fois je relis mon post avant de le soumettre histoire de voir si il ne manque pas d'infos ;-)
kitcreanet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 12h21   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
tiens un début de code (à améliorer sans doute..) qui encadre de [ et ] tous le texte non noir du document actif..

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
 
Sub ChercheCouleur()
  Dim c As Range
  Dim cMemo As Range
  Dim cFin As Range
  Dim r As Range
  Dim i As Integer
  For i = 1 To ActiveDocument.Characters.Count + 1
    Set c = ActiveDocument.Characters(i)
    Debug.Print c
     Select Case c.Font.Color
       Case wdColorAutomatic, wdColorBlack
       If Not (cMemo Is Nothing) Then
         Debug.Print "Fin  couleur " & c
         Set cFin = c
         Set r = ActiveDocument.Range(Start:=cMemo.Start, End:=cFin.End)
         r.Text = "[" & r.Text & "]"
         i = i + 2 'On passe les [ et ]
         Set cMemo = Nothing
       End If
       Case Else
       If cMemo Is Nothing Then
         Debug.Print "Debut couleur " & c
         Set cMemo = c
       End If
     End Select
  Next
 
End Sub
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 13h52   #5
Invité de passage
 
Inscription : août 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 20
Points : 3
Points : 3
Par défaut Super, effectivement c'est un bon début !

Merci pour cette aide !
Effectivement, après ça il est facile pour moi de continuer.
(PS: ça fonctionne nickel sur PC comme sur MAC !)

Moi qui débute en VBA, pourrais tu avoir la gentillesse (c'est déjà très gentil de m'aider) de commenter ton code ?

J'ai à coeur de comprendre tout ce que je fais et de tirer un enrichissement à chaque fois que c'est possible. Ton code va me servir mais je ne veux pas l'appliquer bêtement sans comprendre. J'aimerais savoir 'dans le détail' ce qu'il fait. Je comprends certaines actions, d'autres moins.

Merci encore !
kitcreanet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 14h06   #6
Invité de passage
 
Inscription : août 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 20
Points : 3
Points : 3
Par défaut Heu... parlé trop vite ?

Re-Hello.
Ta macro fonctionne bien pour quelques lignes mais dès que l'on atteint 20, 30, 40 lignes, un fort ralentissement apparait.
Sur un document de 4 pages avec une dizaine de mots en couleurs par page, après deux minutes d'attente, je me suis résolu à "tuer" Word qui ne répondait plus ... (Vesion PC)...

Je n'ose imaginer le temps nécessaires pour traiter 300 pages...

Je crois que la solution n'est pas ici ;-)

Encore merci de ton intérêt.
PS: Je veux quand même bien que tu commentes ton code ;-) j'ai de toute façon des choses à apprendre avec lui ;-) ... MERCi
kitcreanet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 14h08   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
je vais essayer de le commenter ...

déclaration des variables utilisées:

Code :
1
2
3
4
5
Dim c As Range
  Dim cMemo As Range
  Dim cFin As Range
  Dim r As Range
  Dim i As Integer
Boucle parcourant tous les caractéres du document ( j'ai utilisé une boucle For i = 1 To nombre de caractéres, plutôt que une For Each c in ... pour pouvoir "sauter" les caractéres insérés..)

Code :
1
2
3
 
  For i = 1 To ActiveDocument.Characters.Count + 1
    Set c = ActiveDocument.Characters(i)
c est le carctére courant...

Choix suivant couleur caractére courant :
Code :
     Select Case c.Font.Color

Cas où caractére noir (ou couleur automatique), si un début de Zone en couleur est mémorisé (cMemo non null), défini la fin de la zone puis traite la zone en couleur...
Code :
1
2
3
 
      Case wdColorAutomatic, wdColorBlack
       If Not (cMemo Is Nothing) Then
Traitement sur "Fin Couleur", rajoute les carctéres [ et ] au texte sélectionné.. incrémente l'index caractére traité de 2 afin de "sauter" ces 2 caractéres...
Code :
1
2
3
4
5
6
7
8
 
         Debug.Print "Fin  couleur " & c
         Set cFin = c
         Set r = ActiveDocument.Range(Start:=cMemo.Start, End:=cFin.End)
         r.Text = "[" & r.Text & "]"
         i = i + 2 'On passe les [ et ]
         Set cMemo = Nothing
       End If


dans les autres cas .. "en couleur", si début de Zone en couleur non mémorisé on le mémorise..
Code :
1
2
3
4
5
6
7
8
9
10
 
       Case Else
       If cMemo Is Nothing Then
         Debug.Print "Debut couleur " & c
         Set cMemo = c
       End If
     End Select
  Next
 
End Sub
voilà j'espére que c'est plus clair...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 14h10   #8
Invité de passage
 
Inscription : août 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 20
Points : 3
Points : 3
Par défaut Un cours VBA rien que pour moi ;-)

Merci pour ces commentaires, c'est très instructif !
Je note, j'apprends, en attendant de pouvoir moi aussi apporter mon aide ;-)
kitcreanet 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 10h02.


 
 
 
 
Partenaires

Hébergement Web