IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

[VBA-W]prendre des valeurs "texte" dans Excel


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 2
    Points
    2
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    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.

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    si ton fichier de texte et un fichier excel, inspire toi du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://vb.developpez.com/faq/?page=Office#excel2flex
    pour lire le fichier et en parcourir toutes les lignes..

  4. #4
    Courgette17
    Invité(e)
    Par défaut
    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.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    With F1.Range("B:B") 'plage de recherche
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        With Xlfl.Range("B:B")  'plage de recherche
    Enfin, tu ajoutes le remplacement
    Tu vires le "msgbox laligne" que tu remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  6. #6
    Courgette17
    Invité(e)
    Par défaut
    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?

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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.

  8. #8
    Courgette17
    Invité(e)
    Par défaut
    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?

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Non, NoLigne est simplement la variable contenant le N° de ligne
    Quant tu fais
    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+

  10. #10
    Courgette17
    Invité(e)
    Par défaut
    Merci encore ouskel'n'or je suis parvenu à mes fins.

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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

  12. #12
    Courgette17
    Invité(e)
    Par défaut
    Je suis pas le créateur du topic ...

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ben pourquoi on t'a répondu alors ? Faut pas voler la discussion d'un autre ................................

Discussions similaires

  1. [VBA-E] incrémenter des valeurs excel grâce à des boutons
    Par keiserjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2006, 11h32
  2. [VBA-E] Lire des valeurs dans un fichier excel
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/05/2006, 15h40
  3. [VBA-E] Addition des valeurs des textbox
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 49
    Dernier message: 15/02/2006, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo