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

Macros et VBA Excel Discussion :

Remplacer les mots d'une cellule du dernier au premier si le nombre de caractères est supérieur a 100 [XL-2013]


Sujet :

Macros et VBA Excel

  1. #21
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Tabarouette ‼

    Ne vois-tu donc pas la colonne dans la ligne de code n°3 ?!

    C'est pour cela qu'un classeur exemple devrait respecter le même layout que le classeur de travail …
    Comment ajouter un For each selectedcell ???

    au lieu de la ligne 3 qui cible une colonne et non une cellule choisi ???


    j'essaie et j'ai toujours un erreur

  2. #22
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Si c'est seulement une cellule pas besoin de boucler mais juste de ActiveCell !

    Sinon il s'agit d'une Selection     (fonctionnant aussi avec une seule cellule …)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #23
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Si je veux boucler, on me donne un erreur de type 13 pour la partie For R = 1 To UBound(VA)


  4. #24
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Aucun souci de mon côté !
    Tout dépend sur quoi tu veux boucler et on ne peut pas répondre avec si peu d'éléments !

    De toute manière c'est visuel : il suffit de consulter le contenu de la fenêtre Variables locales
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #25
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub Demo1()
     
        Dim VA, VD, R&, N&
     
     
        For Each cell In Selection
        VA = cell.value
        VD = Sheets("data").UsedRange.Columns("A:B").value
     
        Next
     
        With CreateObject("VBScript.RegExp")
                                       .Global = True
                                       .Pattern = " \(\d+.+""\)"
            For R = 1 To UBound(VA)
                If Len(VA(R, 1)) > 100 Then
                           VA(R, 1) = .Replace(VA(R, 1), "")
                    If Len(VA(R, 1)) > 100 Then
                        For N = 1 To UBound(VD)
                            If InStr(VA(R, 1), VD(N, 1)) Then
                                VA(R, 1) = Replace(VA(R, 1), VD(N, 1), VD(N, 2))
                                If Len(VA(R, 1)) < 101 Then Exit For
                            End If
                        Next
                    End If
                End If
            Next
        End With
            Sheets("Travail").[D2].Resize(UBound(VA)).value = VA
     
    End Sub
    Je sais que ca génère un tableau (array) mais j'aimerais que la partie VA sois une selection de cellule et non le tout déjà prédéfini

  6. #26
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Tout dépend déjà de la sélection effectuée et sans plus de précision, je ne perds pas de temps en devinettes …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #27
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Au lieu de prendre toute les cellules de la colonne B et les traités en lot ... je voudrais que ce sont seulement ceux selectionnés par le curseur de la souris


    Par exemple dans le document ci joint je voudrais traité parfois la description 2,3,4 un autre fois la 1 la 5, la 6 parfois toute les descriptions... donc au lieu d'avoir une ligne de code 3 qui défini la colonne B, je voudrais que cela pointe une selection de cellule.

    Je suis désolé, je tente d'être le plus claire possible

    exemple 2.xlsx

    Je viens de faire un essaie avec une description farfelu contenant tous des expressions du lexique et je n'arrive pas au résultats voulu


    PERFORATION PERFORATION SUR PLAQUE MUR. PORTE-AIGUILLE POLYMERIQUE PROGRAMMABLE OSCILLATOIRE ACIER INOX. a donné PERFORATION PERFORATION SUR PLAQUE MUR. PORTE-AIG. POLYMERIQUE PROGRAMMABLE OSCILLATOIRE ACIER INOX.


    au lieu de PERFORATION PERFORATION SUR PLAQUE MUR. PORTE-AIGUILLE POLYMERIQUE PROGRAMMABLE OSCILLATOIRE INOX.

    au lieu que ce sois le dernier groupe de mot ACIER INOX. qui a été remplacé, ca été le porte aiguille.


    Donc si je comprend bien, ce n'est pas l'ordre des mot de ma descriptions de départ qui compte mais l'ordre de mon data ... ce qui me cause problème étant donné que certaines descriptions l'importance des mots diffères et j'arrive au meme résultat que ma programmation antérieur ...


    J'ai monté dans l'ordre de mon data PERFORATION et c'est le début de ma description qui a été abrégé .... PERFOR. PERFOR. SUR PLAQUE MUR. PORTE-AIGUILLE POLYMERIQUE PROGRAMMABLE OSCILLATOIRE ACIER INOX.

  8. #28
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par jpvba Voir le message
    un autre fois la 1 la 5
    A préciser : la sélection est seulement la n°1 et la n°5 ou de la n°1 jusqu'à la n°5 ?

    En fait la sélection même si elle paraît évidente au débutant est un des trucs des plus casses gueules en VBA !


    Citation Envoyé par jpvba Voir le message
    Donc si je comprend bien, ce n'est pas l'ordre des mots de ma descriptions de départ qui compte mais l'ordre de mon data
    Tout à fait ! J'avais ébauché une version au mot par mot plus rapide mais quand j'ai vu la conception de la feuille data
    avec notamment des séquences de mots alors je n'avais plus d'autre choix à part commencer de la feuille data

    Sinon il te faut séparer les mots uniques des séquences de mots (avec un espace séparant chacun d'entre eux) !
    Et là enfin définir une stratégie digne de ce nom …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #29
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Pour la première partie : Je voudrais que selon ma selection de cellule dans mon document exemple que ce sois seulement ceux selectionner. Parfois ca peut etre seulement 1 et 5 d'autre fois de 1 a 5 ... c'est le pourquoi ma tantadive de boucle afin de selection toute les cellules dans la sélections.

    Deuxiement: Effectivement, je crois que la solution na guère d'autre choix d'avoir une fonction split afin de séparer les mots. Le point en commun des descriptions c'est que chacun des mots sont séparé par un espace.

    J'avoue que c'est vraiment pas évident ce que je veux faire

  10. #30
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Sinon il te faut séparer les mots uniques des séquences de mots (avec un espace séparant chacun d'entre eux) !
    Et là enfin définir une stratégie digne de ce nom …
    Je précise ma pensée au cas où je ne fusse pas assez clair :

    il faut au moins deux listes : une pour les séquences de plusieurs mots à remplacer et
           une autre pour traiter chaque mot individuellement.

    Plus définir une stratégie quant à la priorité : l'ordre des mots de la saisie ou l'ordre de la liste des mots individuels …

    C'est pourquoi sans clarification une fois pour toute d'une vision globale
    de cette horreur de tronçonnage digne des bûcherons du Grand Nord,
    je ne perdrais pas de temps à des p'tites retouches au coup par coup
    risquant au final d'être aussi droites que la Tour de Pise
    et allant même jusqu'à repartir d'une blanche page comme la neige
    sur le champ de la belle fermière voisine de la cabane de pêche !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #31
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    oui je comprends ...
    je peux me contenter de mot individuellement et gérer de facon manuel les groupes de mot.


    Ce qui est prioritaire c'est vraiment l'ordre des mots de la saisie i.e. l'ordre des mot de la descriptions. Je veux absolument tronquer de droite a gauche.


    JE veux éviter de toujours jouer avec mon "data" a chaque demande que je recois ... sinon ca donne rien d'automatiser

  12. #32
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Ah oui, donc en ordre inversé !?

    Et pourtant avec une feuille data "propre", avec moins de 60 entrées pour le premier classeur exemple
    j'ai obtenu un bien meilleur résultat qu'à l'origine : seulement une cellule à corriger manuellement !

    Sinon ta nouvelle pièce jointe me laisse encore plus perplexe car déjà elle est vide au niveau de la feuille Travail
    et je ne suis pas plus avancé sur ce que tu sélectionnes, se fait dans la colonne B ou dans la colonne D ?!
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #33
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Oui en ordre inversé

    Effectivement étant donné que la plupart des exemples sont très longs et que la plupart des mot sont tronqué ... bref il y a eu des fortes chances que tu sois arrivé pile sur un résultat proche.

    JE te joind donc un 3 ieme exemple ... la B est ma selection et D est le résultats ... je te remet dans la colonne D les résultat voulu.

    En feuilletant mon Onglet data, tu peux faire des test en mettant dans une description un mot qui est au début du lexique et tu arriveras toujours a une catastrophesexemple 3.xlsx

  14. #34
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Merci de ne plus citer l'intégralité du post juste précédent, cela nuit à la lisibilité de cette discussion ‼


    Bases à confirmer :

    • Traitement via sélection de cellules  uniquement  dans les colonnes B et F
       dont leurs résultats sont affichés respectivement dans les colonnes D et H
       et la première ligne est réservée aux titres des colonnes.

       Toute cellule sélectionnée en-dehors des colonnes suscitées ne déclenchera rien
       en dehors d'un bip de mépris s'il n'y a vraiment aucune cellule à traiter …

    • Traitement mot par mot en ordre inversé : du dernier mot vers le premier avec arrêt
       si la longueur totale du texte modifié est inférieure ou égale à cent caractères.

    • L'ordre des entrées de la feuille data n'a plus aucune incidence …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #35
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Désolé pour les reply précédents

    Donc Traitement uniquement de la colonne B et résultat dans la D. La première ligne est réservé aux titres de colonnes

    Les colonnes en dehors peuvent rien déclencher ou déclencher un BEEP. Dans ma présente sub, j'utilise un offset qui pourrais également me convenir mais effectivement rien déclencher ou un BEEP pourrais etre encore meilleur


    Pour le traitement en ordre inversé. Si la colonne B est égale ou inférieur à 100 on copie l'intégralité. Si jamais le B est plus grand que 100, on tronque jusqu'à ce que la description atteinds le plus proche de 100. Cela marchais nickel !!!


    encore mille fois merci pour votre aide

  16. #36
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Soit la sélection se fait sur les colonnes B & F soit sur les colonnes D & H, à fixer une fois pour toutes …

    Si ce sont les colonnes D & H, quelle est la stratégie si elles contiennent déjà un résultat ?

    Edit : si le traitement n'est pas applicable aux colonnes F & H alors effectivement
    la procédure peut se caler via les numéros des lignes de la sélection …

    Comme le traitement se fait mot par mot, il y aura plus de modifications à opérer manuellement.
    Dans l'état actuel de la base data, il y aura 16 cellules sur 23 à corriger.
    Pour rappel une seule cellule doit être corrigée via la première démonstration avec une nouvelle base de moins de 60 entrées !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #37
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Effectivement, je vais donc essayé le code dans des cas réels afin de voir si la solution est bonne. J'ai actuellement un code qui fais le même principe mais j'arrive a des erreurs supérieur a 40% ce que je ne trouve pas acceptable


    10 à 20 pourcents de travaille manuel sur les descriptions après la "sub" est toute a fait convenable à mon avis.


    Pour la stratégie pour la sélection ce fait seulement sur la B ... si il y a déjà un résultat dans la colonne D dans la meme ranger que l'item sélectionné dans la colonne B, il faudrait bien sur qu'il se fait écraser !!!

    J'ai fait des tests plus approfondies avec la sub demo et ma sub actuel et j'ai moins d'erreur sur ma sub actuel.


    MA sub actuel n'a pas besoin de ménage au niveau de la longueurs des mots ... je ne sais pas si il serais plus simple d'utiliser ma sub comme point de départ pour le fameux de droite a gauche ...


    Qu'en pense-tu ???

  18. #38
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    A mon avis deux listes sont nécessaires : l'actuelle pour les mots à traiter individuellement
    et une autre pour les séquences de mots ou les mots à supprimer avant de passer au traitement individuel …

    Pas de souci pour inverser l'ordre des mots à traiter dans ma démonstration.
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #39
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Ok super ...



  20. #40
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Dans la feuille data dans les colonnes E (source) et F (correction) doivent être listés
    les séquences de mots (séparés par un espace, par exemple "BASE EAU" à remplacer par "EAU")
    puis les mots isolés à supprimer comme par exemple " A " à remplacer par " " …

    Là encore, une fois la base améliorée, le code donnera de meilleurs résultat !

    Par rapport à l'exemple 3 j'ai seulement 18 entrées dans la colonne E.
    J'ai dû ajouter 7 mots dans la colonne A pour obtenir un résultat identique à la précédente démonstration :
    il y a seulement une seule cellule à corriger manuellement !

    Les séquences de mots séparés par un espace de la colonne A n'ont aucune chance d'être traités
    car chaque mot du texte source est comparé avec le contenu global de chaque cellule de cette colonne …

    Par contre il n'y a plus le souci de l'ordre des mots féminins, des pluriels et des singuliers.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub Demo2()
          Const C = 100
            Dim Rg As Range, oRExp As Object, VD, R&, Rc As Range, T$, SP$(), S$
        With Feuil1.UsedRange.Rows("2:" & Feuil1.UsedRange.Rows.Count).Columns
            Set Rg = Intersect(Union(.Item(2), .Item(6)), ActiveWindow.RangeSelection)
        End With
             If Rg Is Nothing Then Beep: Exit Sub
                Rg.Offset(, 2).Select
            Set oRExp = CreateObject("VBScript.RegExp")
                oRExp.Global = True:  oRExp.Pattern = " \(\d+.+""\)"
                   VD = Feuil4.UsedRange.Columns("A:B").Value
        With CreateObject("Scripting.Dictionary")
                For R = 1 To UBound(VD):  .Item(VD(R, 1)) = VD(R, 2):  Next
                   VD = Feuil4.[E1].CurrentRegion.Value
            For Each Rg In Rg.Areas
                For Each Rc In Rg.Cells
                       T = Rc.Value
                If Len(T) > C Then
                           T = oRExp.Replace(T, "")
                    If Len(T) > C Then
                        If IsArray(VD) Then
                            For R = 1 To UBound(VD)
                                If InStr(T, VD(R, 1)) Then
                                    T = Replace$(T, VD(R, 1), VD(R, 2))
                                    If Len(T) <= C Then Exit For
                                End If
                            Next
                        End If
                        If Len(T) > C Then
                               SP = Split(T)
                            For R = UBound(SP) To 0 Step -1
                                           S = Replace$(SP(R), ",", "")
                                If .Exists(S) Then
                                       SP(R) = Replace$(SP(R), S, .Item(S))
                                           T = Join(SP)
                                    If Len(T) <= C Then Exit For
                                End If
                            Next
                                If Len(T) > C Then T = Replace$(T, " PR ", " ")
                        End If
                    End If
                End If
                    Rc.Offset(, 2).Value = T
                Next
            Next
                .RemoveAll
        End With
                Set oRExp = Nothing
    End Sub
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Réponses: 17
    Dernier message: 24/04/2016, 23h20
  2. Remplacer les quadrillages d'une cellule.
    Par chpierro62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/12/2011, 08h52
  3. Récupérer un par un les mots d'une cellule
    Par netgui dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/04/2008, 11h36
  4. comment en VBA mettre les mots dans une cellule en oblique
    Par antoine.dandois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/02/2007, 17h10
  5. [JS] Remplacer les mots dans le code d'une page.
    Par sansamis dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 07/01/2007, 19h06

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