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 :

Créer une condition dans la méthode .Replacement.text d'un objet .find


Sujet :

VBA Word

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de mission Finances en Collectivité Territoriale
    Inscrit en
    Mars 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de mission Finances en Collectivité Territoriale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Créer une condition dans la méthode .Replacement.text d'un objet .find
    Bonjour à tous,

    Je développe actuellement une macro VBA sur Word pour faire des retouches récurrentes sur des courriers administratifs. Parmi ces retouches, je souhaiterais remplacer une suite de texte tel que : "du 01 janvier 2024 au 31 janvier 2024" par "du 01 au 31 janvier 2024".

    Actuellement, je tente de développer autour de la méthode .Find comme ceci :

    Sub Formater_mois()

    'Pour janvier
    With ActiveDocument.Range.Find
    .ClearFormatting
    .MatchWildcards = True
    .TEXT = "(du )" & "([0-9]{2})" & "( janvier )" & "([0-9]{4})" & "( au )" & "([0-9]{2})" & "( janvier )" & "([0-9]{4})"
    .Replacement.TEXT = "\1\2" & IIf("\4" = "\8", "\5\6\7\8", "")
    .Execute Replace:=2

    End With

    End Sub

    Pour le moment, la condition IIf n'est pas complète, mais même cette version simplifiée renvoie toujours un résultat "faux". J'ai donc tenté dans un premier temps de réussir à utiliser une condition IIf dans un contexte plus simple. Le voici :

    With ActiveDocument.Range.Find
    .ClearFormatting
    .MatchWildcards = True
    .TEXT = "(ok)" & "(ok)"
    .Replacement.TEXT = IIf("\1" = "\2", "ok", "ko")
    .Execute Replace:=2

    End With

    Mais voilà, même ici, j'ai toujours un retour "ko".

    Est-ce que quelqu'un aurait une solution svp ?

    Merci

  2. #2
    Membre averti Avatar de Nain porte koi
    Homme Profil pro
    a
    Inscrit en
    Novembre 2023
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : a

    Informations forums :
    Inscription : Novembre 2023
    Messages : 234
    Points : 316
    Points
    316
    Par défaut
    Hello,

    la réponse ne va pas vous plaire : le contenu de remplacement.text est évalué non pas par VBA mais par la fonction de recherche et remplace de word, donc le iif ne peut pas être évalué correctement

    Si vous voulez faire des trucs comme ça je pense qu'il faudrait passer par des regex dans VBA sans utiliser le R&R de Word
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de mission Finances en Collectivité Territoriale
    Inscrit en
    Mars 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de mission Finances en Collectivité Territoriale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour votre retour.

    Je pensais qu'il y aurait des solutions, mais créer une macro Word avec Regex rien que pour cela me semble très complexe. Sachant qu'il va falloir comparer les années trouvées dans la chaine de texte recherchée, alors que ces années peuvent être des variables comprises entre 1950 et 2024...
    Sans parler des ressources utilisées si on utilise une boucle (i) pour cela...

    Etant donné que mon courrier Word est généré par publipostage via macro depuis Excel, je vais gérer ça avec des formules Excel. Ce sera beaucoup plus simple et optimisé.

    Merci quand même !

Discussions similaires

  1. comment créer une date dans un champ input de type text
    Par le maire dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/06/2014, 11h58
  2. Réponses: 13
    Dernier message: 22/07/2009, 14h36
  3. Débutant : Définir une condition dans une zone de texte
    Par OlivierC69 dans le forum Access
    Réponses: 5
    Dernier message: 11/08/2006, 23h02
  4. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21
  5. Créer une série dans un chart
    Par cyrose dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/11/2002, 11h37

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