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 14/03/2006, 02h12   #1
Invité de passage
 
Inscription : mars 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 3
Points : 0
Points : 0
Par défaut [VBA-W]prendre des valeurs "texte" dans Excel

Bonjour,

Les documents sur lesquels je travaille sont très longs: plusieurs fichiers de 100aines de pages.

Je dois efffectuer des corrections: par exemple, remplacer tous les "MU-RAILLES DE CHINE" par "Muraille de Chine".

J'ai commencé à automatiser en utilisant toujours la même séquence ci-dessous:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "MU-RAILLES DE CHINE"
.Replacement.Text = "Muraille de Chine"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Mais je dois taper ajouter manuellement des nouvelles séquences à la macro en mettant le terme à rechercher et le terme à remplacer.

Serait-ce possible de lancer en boucle la séquence ci-dessus en allant chercher les valeurs textes dans un fichier excel: 1ère colonne les termes à rechercher, et 2ème colonne les termes à remplacer. Cette séquence serait à executer en boucle jusqu'à la fin du tableau excel ?

Merci d'avance de vos avis
teromah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2006, 08h08   #2
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
Tu peux bien évidemment le faire, en lisant tont fichier de texte ligne par ligne et en lançant ta boucle de remplacement juste après la lecture d'une ligne dans laquelle figureraient, séparés par un séparateur de ton choix, le texte à remplacer et le texte existant.
Pour savoir comment ouvrir et lire dans un fichier texte : une petite recherche sur ce forum...
Tu peux également, surtout si le nombre de textes à modifier n'est pas démesuré, te servir d'un tableau à 2 dimensions, la 1ère colonne contenant le texte à remplacer et la 2ème celui de remplacement puis lire dans ce tableau, index par index, ces deux textes et lancer ta boucle après chaque lecture.
Voilà 2 démarches possibles (il y en a d'autres) et parfaitement réalisables après avoir utilisé l'aide en ligne et fait une petite recherche sur ce forum.
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2006, 08h09   #3
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 849
Points : 16 849
Envoyer un message via Skype™ à bbil
si ton fichier de texte et un fichier excel, inspire toi du code :
Code :
http://vb.developpez.com/faq/?page=Office#excel2flex
pour lire le fichier et en parcourir toutes les lignes..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 15h50   #4
Courgette17
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
J'aimerais savoir avec un fichier Excel, teromah ou n'importe qui pouvant m'aider, comment utiliser en pratique la fonction de recherche indiqué dans le premier post. C'est à dire comment récupérer les résultats.
Ensuite comment puis je faire pour limiter les recherches dans une seule ligne?
Finalement j'aimerais savoir si il y a moyen de récupérer la zone de nom (l'adresse de la cellule, ou les coordonnées appelez ceci comme vous voulez, les A1,A2 etc.) des cellules trouvées ou alors plus généralement des cellules ayant une valeur spécifique.

Je suis débutant dans ce langage vb/asp.net donc je peine un peu sur ces sujets.

Merci d'avance

P.S.: Je sais que je ne poste pas dans la bonne section du forum, mais comme les résultats de mes recherches m'ont amené sur ce topic, je pensais que ce fut plus approprié de le poster ici.
Modérateurs, n'hésitez pas à déplacer ce post si il le faut.
  Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 19h42   #5
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 928
Points : 11 928
Regarde , tu as une recherche en boucle dans Excel (à adapter pour Word en instanciant application, classeur et feuille de calcul)
Pour instancier les uns et les autres,
Code :
1
2
3
4
5
6
7
8
Dim XlAppli
Dim XlCl
Dim Xlfl
Dim obj
    Set XlAppli = CreateObject("Excel.Application") '< L'appli Excel
    Set XlCl = XlAppli.Workbooks.Open("D:\xls\LeFichier.xls") '< le classeur
    Set Xlfl = XlCl.Worksheets("feuil1") '< la feuille
    Xlfl.Activate
Ensuite, dans le code de l'url, tu remplaces
Citation:
With F1.Range("B:B") 'plage de recherche
par
Code :
    With Xlfl.Range("B:B")  'plage de recherche
Enfin, tu ajoutes le remplacement
Tu vires le "msgbox laligne" que tu remplaces par
Code :
C.value = Replace(c.value, LeMotFaux, LeMotVrai)
Essaie d'adapter, si tu n'y parviens pas, propose-nous ton code qu'on puisse l'arranger
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 09h32   #6
Courgette17
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Merci pour ta réponse, je sens que ça va bien me servir.
J'en profite poser de petites questions après avoir adapté le code au mien (virer les Set sinon ça compile pas VS 2003 oblige, remplacer Variant par Object...) :

Que dois je mettre dans xlValues? A quoi ça correspond exactement LookIn? J'ai cherché sur google mais je n'ai pas compris.
Comment je récupère le résultat de la fonction RechercheEnBoucle? en sortant la variable NoLigne? comment puis je le faire?
  Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 19h56   #7
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 928
Points : 11 928
Désolé mais je ne connais pas VS 2003

Pour les paramètre de find
Citation:
Envoyé par L'aide
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

expression Obligatoire. Expression qui renvoie un objet Range.

What Argument de type Variant obligatoire. Données à rechercher. Il peut s'agir d'une chaîne de caractères ou de tout autre type de données Microsoft Excel.

After Argument de type Variant facultatif. Cellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument After doit correspondre à une seule cellule dans la plage. Rappelez-vous que la recherche commence après cette cellule ; la cellule spécifiée n'est pas recherchée jusqu'à ce que la méthode reviennent à cette cellule. Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.

LookIn Argument de type Variant facultatif. Type d'informations.

LookAt Argument de type Variant facultatif. Il peut s'agir de l'une des constantesXlLookAt suivantes : xlWhole ou xlPart.

SearchOrder Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByRows ou xlByColumns.

SearchDirection Argument de type XlSearchDirection facultatif. Direction de la recherche.

XlSearchDirection peut être l'une de ces constantes XlSearchDirection.
xlNext par défaut
xlPrevious

MatchCase Argument de type Variant facultatif. Affectez-lui la valeur True pour que la recherche respecte la casse. La valeur par défaut est False.

MatchByte Argument de type Variant facultatif. Cet argument est utilisé uniquement si vous avez sélectionné ou installé la prise en charge des langues codées sur deux octets. Affectez-lui la valeur True pour que les caractères codés sur deux octets ne correspondent qu'aux caractères codés sur deux octets. Affectez-lui la valeur False pour que les caractères codés sur deux octets correspondent à leurs équivalents codés sur un octet.

SearchFormat Argument de type Variant facultatif. Format de la recherche.
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 09h01   #8
Courgette17
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Merci ouskel'n'or.

Juste une question encore: http://www.developpez.net/forums/sho...d.php?t=301105

Dans le code de ce lien, comment tu fais pour récupérer la variable NoLigne?
C'est une procédure, ce n'est pas censé renvoyer un résultat, si?
Dois je la transformer en fonction?
  Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 10h43   #9
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 928
Points : 11 928
Non, NoLigne est simplement la variable contenant le N° de ligne
Quant tu fais
Citation:
NoLigne = C.row
tu as le n° de ligne de la donnée cherchée (maVal dans l'exemple que tu cites)
Mais je ne suis pas sûr de comprendre ta question.
Tu dis
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 11h28   #10
Courgette17
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Merci encore ouskel'n'or je suis parvenu à mes fins.
  Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2007, 17h04   #11
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 928
Points : 11 928
Citation:
Envoyé par MadMarc52
Merci encore ouskel'n'or je suis parvenu à mes fins.
Ben alors, c'est fini ! Et Résolu, tu connais pas le bouton en bas de cette fenêtre ? Faut toujours mettre Résolu quand c'est résolu
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 15h29   #12
Courgette17
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Je suis pas le créateur du topic ...
  Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 16h20   #13
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 928
Points : 11 928
Ben pourquoi on t'a répondu alors ? Faut pas voler la discussion d'un autre ................................
ouskel'n'or 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 17h28.


 
 
 
 
Partenaires

Hébergement Web