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 :

Fonction Replace fonctionne seulement en dehors des formules [XL-2007]


Sujet :

Macros et VBA Excel

  1. #41
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    [INDENT=2]Bon ben encore une fois c'est vraiment tout bête : il suffit juste de ne pas oublier le B-A-BA du VBA ‼[...]
    Sauf que cela, c'est pour la fonction replace. Ici, depuis le début, on parle de méthode Replace dans laquelle on ne doit pas parler anglais, et si on cherche/remplace avec cette méthode (équivalent de ctrl+f ou ctrl+h), on ne doit pas remplacer les ; par des ,
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  2. #42
    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

    Non comme pourtant signalé il s'agit bien de la méthode Replace correspondant à la fonctionnalité d'Excel
    Rechercher / Remplacer et non pas à la fonction texte VBA du même nom !

    Comme aussi indiqué après avoir testé (ok version 2003), tout texte / ponctuation à remplacer
    dans une formule doit être converti en anglais, d'où l'intérêt de l'affichage via Formula
    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. #43
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    En fait, il y a eu tellement de tests que l'on ne sait plus ce qui a été essayé ni dans quelle version, et je me suis moi-même un peu emmêlé les pinceaux entre le CTRL+F (en français) et le range.replace (en anglais).

    Ce que je viens de constater dans le fichier, c'est que les cellules qui contiennent les formules sont fusionnées (l'étaient-elles avant vendredi dernier?).

    Le Find/Replace doit donc tenir compte de cette fusion de cellule (dans Excel comme dans VBA).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #44
    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

    On peut éviter Find avec la méthode Replace adaptée aux formules en anglais …

    J'ai évoqué Find après avoir constaté l'échec du remplacement en français sans avoir eu
    le temps de tester un peu plus même si cela aurait dû faire tilt dans ma p'tite caboche !
    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. #45
    Membre habitué
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    La ponctuation compte aussi car elle est aussi différente dans les formules en anglais …
    J'ai essayé les virgules. Cela ne fonctionne pas plus. Ta remarque me fait me demander pourquoi j'ai pu effectuer des remplacements contenant des point-virgules avant...

  6. #46
    Membre habitué
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    En fait, il y a eu tellement de tests que l'on ne sait plus ce qui a été essayé ni dans quelle version, et je me suis moi-même un peu emmêlé les pinceaux entre le CTRL+F (en français) et le range.replace (en anglais).

    Ce que je viens de constater dans le fichier, c'est que les cellules qui contiennent les formules sont fusionnées (l'étaient-elles avant vendredi dernier?).

    Le Find/Replace doit donc tenir compte de cette fusion de cellule (dans Excel comme dans VBA).
    Oui. Ça c'est une constante : ce n'est pas moi qui ai édité ces fiches. Beaucoup de cases sont fusionnées mais pas toutes

    Cependant la recherche se fait par ligne donc elle n'est pas sensible à la fusion à priori non ?

  7. #47
    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



    Juste comparer la formule locale - française par exemple - (FormulaLocal)
    avec la formule native (toujours en anglais) en interne (Formula) …
    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)

  8. #48
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    @Marc: Ca aurait dû tilter dans ma tête aussi...

    Cela étant, nous ne sommes pas plus avancés puisque malgré ces remplacements, ça ne fonctionne pas alors qu'il semblait que ça fonctionnait avant sans les remplacements (avec les ; et les cellules fusionnées).

    En tout cas, cela me conforte dans l'idée qu'il serait de loin préférable de ramener les données dans le fichier local puis de travailler avec la table locale. De plus, en remplaçant les RECHERCHEV par des INDEX/EQUIV, on ne devrait pas modifier l'index de colonne comme on le fait ici. Je parie que sur le temps que tous ces essais, infructueux qui plus est, ont été effectués, les modifications pour importer les données et travailler en local seraient effectuées.

    Je le dis et je le redis: travailler avec des formules qui lient des classeurs entre eux, c'est aller au casse-pipe à coup sûr.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #49
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Au passage, je ne comprends pas bien pourquoi il faut répéter ces remplacements. Les plages sources vers lesquelles les RECHERCHEV pointent migrent toutes seules de U2:U500 vers T10:T500 qu'il faut se casser le c*** à les modifier régulièrement pour les faire repointer vers U?

    Il n'y aurait pas un (sérieux) problème de conception à la base?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #50
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir,

    Comme j'aime bien explorer, même si ce n'est pas conventionnel (Senseï Marc qu'en penses tu ?) et que je n'ai pas l'habitude de faire du remplacer dans des formules
    (car lorsque la conception est bien pensée, nul besoin de faire des changements), je suis parti vers un autre horizon pour de l'exploration.

    Ceci dit Nagel Tha, ton code, que j'ai survolé à l'air bien compliqué pour faire ces remplacements dans des formules.
    Surtout que les noms des classeurs sont déjà connus; il suffirait de vérifier l'existence de ceux-ci dans le chemin spécifier afin de faire les modifications …
    PS : quasi 100 lignes de codes => je n'ai pas regardé dans le détails

    Pour le fun et l'exploration j'ai fait un petit test avec une variable tableau (A1 =1 pour le début, ce n'est pas l'indication des lignes de 1 à 10 mais bien des chiffres) :

    1 A K =RECHERCHEV(A1;$A$1:$B$10;2;0)
    2 B L =RECHERCHEV(A2;$A$1:$B$10;2;0)
    3 C M =RECHERCHEV(A3;$A$1:$B$10;2;0)
    4 D N =RECHERCHEV(A4;$A$1:$B$10;2;0)
    5 E O =RECHERCHEV(A5;$A$1:$B$10;2;0)
    6 F P =RECHERCHEV(A6;$A$1:$B$10;2;0)
    7 G Q =RECHERCHEV(A7;$A$1:$B$10;2;0)
    8 H R =RECHERCHEV(A8;$A$1:$B$10;2;0)
    9 I S =RECHERCHEV(A9;$A$1:$B$10;2;0)
    10 J T =RECHERCHEV(A10;$A$1:$B$10;2;0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()Dim VA, i&, j&
    VA = Feuil1.UsedRange.FormulaLocal
    For i = LBound(VA) To UBound(VA)
        For j = LBound(VA, 2) To UBound(VA, 2)
            If InStr(VA(i, j), "=") = 1 Then
                VA(i, j) = Replace(VA(i, j), "$A$1:$B$10;2;0", "$A$1:$C$10;3;0")
            End If
        Next
    Next
    Feuil1.UsedRange.FormulaLocal = VA
    End Sub
    PS : J'ai tenté avec un For Each … mais je n'ai pas réussi
    Tout ce qui est texte ou chiffre le reste, les formules se modifient bien

    Une façon possible pour du remplacer (c'est juste à titre d'exemple (bâclé) pour montrer le principe - je ne dis pas que c'est la meilleure soution) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test2()Dim Formule$, Trouve, Remplace, T, i As Byte ' , k as Byte
        Formule = "PourModifierMaFormule!Outillage'!$D$10:$T$90;17;"
        Trouve = Array("folder", "Outillage'!$M$10:$U$500;3;", "Outillage'!$T$10:$U$500;3;", "Outillage'!$M$10:$U$500;2;", "Outillage'!$M$10:$U$500;3;", "Outillage'!$M$2:$U$500;2;", "Outillage'!$D$10:$T$90;17;")
        Remplace = Array("M:\", "Outillage'!$M$2:$U$500;3;", "Outillage'!$M$2:$U$500;3;", "Outillage'!$M$2:$U$500;3;", "Outillage'!$M$2:$U$500;3;", "Outillage'!$M$2:$U$500;3;", "Outillage'!$B$1:$I$65536;8;")
        i = 0 ' on supprime si on utilise For k
        For Each T In Trouve ' OU =>  For k = 0 to Ubound(Trouve)
            If InStr(Formule, T) > 0 Then ' If InStr(Formule, Trouve(k)) Then
                Formule = Replace(Formule, Trouve(i), Remplace(i)) ' Formule = Replace(Formule, Trouve(k), Remplace(k))
            End If
            i = i + 1 ' on supprime si on utilise For k
        Next
        Debug.Print Formule
     End Sub
    PS : j'ai fait ma 1ère contrib, n'hésitez pas à la voir et me faire un retour ICI
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #51
    Membre habitué
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Points : 173
    Points
    173
    Par défaut
    Arigato gozaïmasu Ryu. Je vais explorer ta proposition dans la journée

    Je vous remercie tous pour votre patience et pour vos suggestions.

    C'est vrai que mon code est assez compliqué car d'un côté j'essaye de penser à tout et de l'autre côté je ne connaissais pas VBA avant de tomber sur ce problème. De plus dans le domaine de la programmation je suis assez léger car ma spécialité est le Génie Physique et non l'informatique donc je n'ai que quelques bases (langage C, CVI et LabView ainsi que html, css et javascript en autodidacte comme le VBA). Il s'agit donc de mon plus gros code. Aussi je vous remercie encore de votre patience.

    J'espère notifier d'ici peu mon problème comme résolu. Je ne manquerai pas de vous faire part de la solution le cas échéant

  12. #52
    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 RyuAutodidacte Voir le message
    Comme j'aime bien explorer, même si ce n'est pas conventionnel (Senseï Marc qu'en penses tu ?) et que je n'ai pas l'habitude de faire du remplacer dans des formules
    Salut Ryu !

    Senseï est un peu trop à mon niveau, juste un explorateur aimant montrer des chemins de traverse à d'autres explorateurs !

    Quand j'ai eu besoin de remplacer au sein de formules (cas non prévu ou le concepteur n'ayant pas maitrisé son sujet)
    je l'ai toujours effectué directement au sein de la feuille de calculs sans code via Rechercher / Remplacer car c'est ponctuel;
    je n'ai jamais eu un tel cas de 300 classeurs à corriger !

    Si la célérité est recherchée alors souvent mieux vaut éviter une boucle et privilégier les fonctionnalités d'Excel, même en VBA …
    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. #53
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    S'assurer que ToReplace(y)et By(y) correspondent a la propriete Formula et non FormulaLocal. Donc pas de ; comme separateur dans la formule.

    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
    Sub MultipleSearch()
        Application.FindFormat.Clear
        Dim SearchInRange As Range
     
        For x = 1 To Worksheets.Count
     
    Set SearchInRange = destinationWorkbook.Worksheets(x).Range("A1:Z300")
     
    'Pour modifier seulement les cellules contenant une formule
    Set SearchInRange = SearchInRange.SpecialCells(xlCellTypeFormulas)
     
    Dim test1 As String
    Dim cell As Range
    For y = 1 To 8
    test1 = ""
     
    Set cell = SearchInRange.Find(ToReplace(y), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False)
     
    If cell Is Nothing Then
     MsgBox y & " Non trouve avec FIND" & vbLf & ToReplace(y)
    End If
     
    SearchInRange.Replace what:=ToReplace(y), replacement:=By(y), LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
     
    Next y
    Next x
    End Sub
    Cordialement

    Docmarti.

  14. #54
    Membre habitué
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Points : 173
    Points
    173
    Par défaut
    Mon problème est résolu. Merci à tous !

    Je suis revenu à la version de départ non compartimentée que mon ami informaticien a testée et j'ai gardé le minimum de code. La méthode .Replace est dans le Sub principal (le fait qu'elle ne le soit plus dans la version compartimentée posait peut-être problème) et j'ai remplacé les , par des ; dans mes chaînes. Cela fonctionne à la perfection. Merci

  15. #55
    Membre habitué
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Points : 173
    Points
    173
    Par défaut
    Salut,

    Je n'ai pas pu faire de synthèse rapidement car j'ai eu un emploi du temps assez chargé mais je n'ai pas oublié car il me tenait à coeur que cette discussion puisse servir à d'autres. Voici mes fonctions :

    Fonction de remplacement des chaînes dans tous les classeurs d'un dossier avec boucle sur chaque feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function ReplaceStrings()
        Application.ReplaceFormat.Clear 'makes sure there will be no format parameter in the replace method
        'the x for loop is for repeating .Replace in all the worksheets
        'the y for loop is for replacing all the strings in the table
        x = 1
        y = 1
        For x = 1 To Worksheets.Count
            For y = 1 To k
                Worksheets(x).Cells.Replace What:=ToReplace(y), Replacement:=By(y), LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
            Next y
        Next x
        Application.ReplaceFormat.Clear
    End Function
    Documentation méthode Range.Replace (msdn)

    Fonction qui récupère les chaînes à remplacement et de substitution dans une plage définie (ici "A11:B60") :
    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
     
    Function DefineToReplaceBy()
     
    Dim Table As Variant: Table = ThisWorkbook.Worksheets(1).Range("A11:B60").Value 'table containing the strings
    Dim LastReplacement As Integer: LastReplacement = ThisWorkbook.Worksheets(1).Range("A11:B60").SpecialCells(xlCellTypeLastCell).Row - 11 'maximum number of replacements
     
    ThisWorkbook.Worksheets(1).Range("A11:B60").NumberFormat = "@"
    'first while loop counts till the last string is reached
        k = 1
        While VarType(Table(k, 1)) <> vbEmpty And VarType(Table(k, 1)) <> vbNull And k < ThisWorkbook.Worksheets(1).Range("A11:B60").SpecialCells(xlCellTypeLastCell).Row
            k = k + 1
        Wend
     
        LastReplacement = k - 1 'the loops will stop at the last string
     
    'second while loop sets each ToReplace(k) to Table(k,1) from k = 1 to k = LastReplacement (from first string to last string to replace)
        k = 1
        While VarType(Table(k, 1)) <> vbEmpty And VarType(Table(k, 1)) <> vbNull And k <= LastReplacement
            ToReplace(k) = Table(k, 1)
            k = k + 1
        Wend
     
    'third and last while loop do the same for By(k)
        k = 1
        While VarType(Table(k, 2)) <> vbNull And k <= LastReplacement
            If VarType(Table(k, 2)) = vbEmpty Then Table(k, 2) = "" 'any empty cell will be converted into an empty string
            By(k) = Table(k, 2)
            k = k + 1
        Wend
    End Function
    Attention, si vous faîtes du hardcoding il faudra faire attention à remplacer les ; par des , si vous cherchez une chaîne dans une formule (dont les arguments sont séparés par une virgule dans le système international/anglo-saxon). Ne pas faire cette adaptation conduit à un fonctionnement imprévisible.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Fonction .replace qui ne fonctionne pas.
    Par Rominou777 dans le forum Débuter avec Java
    Réponses: 19
    Dernier message: 09/02/2012, 19h22
  2. Réponses: 4
    Dernier message: 20/10/2010, 19h56
  3. Réponses: 20
    Dernier message: 06/05/2010, 12h32
  4. Stopper le fonctionnement des formules
    Par lipadec dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 13/06/2009, 18h58
  5. fonction replace avec des guillemets
    Par mapmip dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/01/2009, 08h17

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