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. #1
    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 Fonction Replace fonctionne seulement en dehors des formules
    Bonjour à tous,

    J'ai découvert le VBA il y a peu et j'ai codé une macro afin de réparer les liens d'un répertoire de 300 classeurs (Workbooks) Excel à peu près. Pour cela j'ai utilisé la Cells.Replace What:=ToReplace(y), Replacement:=By(y)...dans une boucle en y (pour parcourir un tableau contenant les sous-chaînes à remplacer elle-même dans une boucle en x qui parcourt les feuilles de calcul (Worksheets). Mon code a fonctionné pour nombre de liens. Cependant j'ai également une plage de données à modifier dans des formules mais rien à faire replace n'y touche pas alors que via ctrl+h cela fonctionne.

    Merci de m'avoir lu. Je compte sur vos idées pour m'expliquer ce qui ne va pas xD

    Mon code fait 200 lignes grosso modo donc je ne poste que la partie qui utilise le replace pour ne pas vous perdre...:

    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
     
    filename = Dir(folder & "*fs*" & "*.xls", vbNormal)
     
        'strings to replace in the paths of formulas
        ToReplace(1) = folder 'the local folder path is always to be deleted
        ToReplace(2) = "\photo" 'photo is the destination folder from where FS are taken
        ToReplace(3) = "\\ABLGCVS0246\"                 'for edition so these two paths could be to delete
        ToReplace(4) = "$T$10:$U$500;2" 'ce remplacement est celui qui ne fonctionne pas
        ToReplace(5) = "'M:\Service QUALITE\Gestion de l''outillage (calibrated tools)\Calibrated tools\[Liste des outillages calibrés (QM-F61).xls]"
        ToReplace(6) = "\Fiches suiveuses actives"
        ToReplace(7) = "rev 2.xls]"
     
        'they will be replaced by those ones:
        By(1) = "M:\"
        By(2) = ""
        By(3) = "M:\"
        By(4) = "$M$2:$U$500;3"
        By(5) = "'M:\Service QUALITE\Gestion de l''outillage (calibrated tools)\Calibrated tools\[Liste des outillages calibrés (QM-F61) rev 2.xlsm]'"
        By(6) = ""
        By(7) = "rev 2.xlsm]"
     
        While Len(filename) <> 0
     
            Set destinationWorkbook = Workbooks.Open(folder & filename)
     
            x = 1
            For x = 1 To Worksheets.Count
     
                '4 files are protected. This conditional block unlock them
                If destinationWorkbook.name = "fs000106 310a2020-5, -10, -11.xls" _
                    Or destinationWorkbook.name = "fs000109 310a2041.xls" _
                    Or destinationWorkbook.name = "fs000223 335-106-4xx-0.xls" _
                    Or destinationWorkbook.name = "fs000270 AFT EMS 5A-B.xlsm" Then
                        destinationWorkbook.Unprotect
                End If
     
                y = 1
                For y = 1 To 7
                    Worksheets(x).Cells.Replace What:=ToReplace(y), _
                    Replacement:=By(y), _
                    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
                Next y
     
             Next x

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Si j'ai bien compris, tu veux remplacer des sous-chaînes dans des formules ?
    - Une formule est une chaîne de caractères
    - la formule éventuelle d'une cellule est sa propriété Formula
    - tu peux définir la plage des cellules contenant une formule par la méthode Range.SpecialCells (rubrique Range.SpecialCells, méthode de ton aide interne vba) avec l'argument xlCellTypeFormulas
    te reste à appliquer ta fonction replace à la propriété Formula des cellules de cette plage.
    Je te laisse faire sur ces indications qui me paraissent claires et suffisantes.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    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 Argument facultatif MatchByte (Cells.Replace)
    Bonjour,
    Merci beaucoup pour ta réponse unparia. Cette méthode pourra m'être utile.
    Je me suis rendu compte de l'absence de l'argument facultatif MatchByte dans mon code. En effet, le rechercher/remplacer via ctrl+h ne le propose pas ! Or certains caractères susceptibles d'être codés sur 2 octets au lieu de 1 peuvent poser problème ce qui a été le cas pour moi semble-t-il. Avec cet argument mon code a fonctionné. Je n'ai pas d'ordinateur chez moi donc je ne peux pas faire d'autres tests. Quand je m'en serai assuré je noterai la discussion résolue et posterai la ligne de code incriminée car je pense que plus d'un novice tel que moi pourra commettre l'erreur.

  4. #4
    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 Modification infructueuse :/
    Rebonjour,

    Sur des feuilles tests, ma modification permet à mon code de faire la modification, mais dans les feuilles visées non...

    Code avant modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For y = 1 To 10
                    Worksheets(x).Cells.Replace What:=ToReplace(y), _
                    Replacement:=By(y), _
                    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
                Next y
    Code après modification (ajout de MatchByte:=False et de xlCellTypeFormulas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For y = 1 To 10
                    If ToReplace(y) = "Exit For" Or By(y) = "Exit For" Then Exit For 'permet de définir plus de chaînes à remplacer sans modifier les itérations de la boucle for
                    Cells.SpecialCells(xlCellTypeFormulas).Replace What:=ToReplace(y), Replacement:=By(y), LookAt:=xlPart, SearchOrder:=xlByRows, _
                    MatchCase:=True, MatchByte:=False, SearchFormat:=False, ReplaceFormat:=False
                Next y
    Auriez-vous des idées ?

  5. #5
    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 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Salut.

    Que veux-tu dire par "dans les feuilles visées"...?

    Comment démarres-tu ta macro? Le titre de ta question "en dehors des formules" me fait penser que tu essaies de réaliser cela par l'appel de ta fonction dans une formule Excel. Si c'est le cas, ça ne peut fonctionner. Une fonction personnelle appelée dans une feuille de calcul ne peut RIEN modifier dans Excel et peut seulement renvoyer une valeur exploitable dans la formule.
    "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...
    ---------------

  6. #6
    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,

    Que veux-tu dire par "dans les feuilles visées"...?
    Pour moi les feuilles visées sont les feuilles de calcul (worksheets) des classeurs (workbooks) ouverts successivement par la méthode .Open. Dans mon code j'appelle ces classeurs "destinationWorkbook" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set destinationWorkbook = Workbooks.Open(folder & filename)
    Comment démarres-tu ta macro?
    F5/F8 voire le bouton play sous l'IDE VBA intégré à Excel.

    "en dehors des formules"
    Pour moi une formule est : "=FONCTION(PARAM1,PARAM2,...,PARAMX)" par exemple ainsi "bonjour" et "3" ne sont pas des formules selon moi.

    Si j'ai bien compris, tu veux remplacer des sous-chaînes dans des formules ?
    C'est cela que je souhaite via VBA. Mon problème étant que dans les fichiers que je veux modifier, certaines sous-chaînes restent inchangées...

    Mon sub "main" complet :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    Option Explicit
    Public Sub Update_HYPERLINKS_InAllWorkbooksInFolder()
     
        Application.DisplayAlerts = False 'Disables popup warnings
        Application.ScreenUpdating = False 'No new windows will appear
     
        Dim folder As Variant 'Folder containing all the Workbooks
        Dim Continue As Integer
        Dim filename As String 'filename contains folder name and file extension concatenated into one string
        Dim ToReplace(1 To 12) As String 'bad parts of links
        Dim By(1 To 12) As String 'to replace by the parts contained in this string
        Dim destinationWorkbook As Workbook 'destinationWorkbook will change at each iteration of while
     
        Dim x As Integer, y As Integer
     
        Dim OpenAnother As Integer
        OpenAnother = 7 '7 is the integer value of vbNo (No button of MsgBox)
     
        ToReplace(1) = "Exit For"
        ToReplace(2) = "Exit For"
        ToReplace(3) = "Exit For"
        ToReplace(4) = "Exit For"
        ToReplace(5) = "Exit For"
        ToReplace(6) = "Exit For"
        ToReplace(7) = "Exit For"
        ToReplace(8) = "Exit For"
        ToReplace(9) = "Exit For"
        ToReplace(10) = "Exit For"
        ToReplace(11) = "Exit For"
        By(1) = "Exit For"
        By(2) = "Exit For"
        By(3) = "Exit For"
        By(4) = "Exit For"
        By(5) = "Exit For"
        By(6) = "Exit For"
        By(7) = "Exit For"
        By(8) = "Exit For"
        By(9) = "Exit For"
        By(10) = "Exit For"
        By(11) = "Exit For"
        'Folder containing all the Workbooks:
        Do
     
        folder = SelectingFolderToUpdate 'puts into folder the path of the selected folder via the dialog box
        filename = Dir(folder & "*.xls", vbNormal)
     
        If folder = "\\ablgcvs0246\photo\" Then
            Continue = MsgBox("This is the photo folder. Please make sure there is a copy up to date in 'Archive' before editing" _
            & Chr(10) & Chr(10) & "OK to Continue - Cancel to Exit (Cancel if you are not sure 'Archive' is up to date)", _
            vbExclamation + vbOKCancel, "Checking the files are safe before going ahead")
            If Continue = 2 Then
                Application.ScreenUpdating = True
                Exit Sub 'exits the sub if the cancel button of MsgBox is clicked
            End If
        End If
     
        If VarType(folder) <> vbString Then
            Application.ScreenUpdating = True
            Exit Sub 'exits the sub if the cancel button of FileDialog is clicked
        End If
     
        'strings to replace in the paths of formulas
        ToReplace(1) = folder 'the local folder path is always to be deleted
     
        ToReplace(2) = "Outillage'!$M$10:$U$500;3;"
        ToReplace(3) = "Outillage'!$T$10:$U$500;3;"
        ToReplace(4) = "Outillage'!$M$10:$U$500;2;"
        ToReplace(5) = "Outillage'!$M$10:$U$500;3;"
        ToReplace(6) = "Outillage'!$M$2:$U$500;2;"
        ToReplace(7) = "Outillage'!$D$10:$T$90;17;"
     
        'ToReplace(2) = "C:\"
        'ToReplace(3) = "\photo" 'photo is the destination folder from where FS are taken
        'ToReplace(4) = "\\ABLGCVS0246\"                 'for edition so these two paths could be to delete
     
        'ToReplace(11) = "\\ablgcsfp0112\Commun\"
        'ToReplace(12) = "\\ABLGCSFP0112\Commun\"
     
        'they will be replaced by those ones:
        By(1) = "M:\"
     
        By(2) = "Outillage'!$M$2:$U$500;3;"
        By(3) = "Outillage'!$M$2:$U$500;3;"
        By(4) = "Outillage'!$M$2:$U$500;3;"
        By(5) = "Outillage'!$M$2:$U$500;3;"
        By(6) = "Outillage'!$M$2:$U$500;3;"
        By(7) = "Outillage'!$B$1:$I$65536;8;"
     
        'By(2) = "M:\"
        'By(3) = ""
        'By(4) = "M:\"
     
        'By(11) = "M:\"
        'By(12) = "M:\"
     
        While Len(filename) <> 0
     
            Set destinationWorkbook = Workbooks.Open(folder & filename)
     
            x = 1
            For x = 1 To Worksheets.Count
     
                '4 files are protected. This conditional block unlock them
                If destinationWorkbook.Name = "fs000106 310a2020-5, -10, -11.xls" _
                    Or destinationWorkbook.Name = "fs000109 310a2041.xls" _
                    Or destinationWorkbook.Name = "fs000223 335-106-4xx-0.xls" _
                    Or destinationWorkbook.Name = "fs000270 AFT EMS 5A-B.xlsm" Then
                        destinationWorkbook.Unprotect
                End If
     
                y = 1
                For y = 1 To 10
                    If ToReplace(y) = "Exit For" Or By(y) = "Exit For" Then Exit For
                    Worksheets(x).Cells.Replace What:=ToReplace(y), Replacement:=By(y), _
                        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, MatchByte:=False, _
                        SearchFormat:=False, ReplaceFormat:=False
                Next y
     
             Next x
     
            Selecting_RCD_or_TOP_ASSY_or_WorkSheet1 'Function which tests existence of RCD tab and selects it if it does
                'or selects TOP ASSY or the first tab otherwise
     
            '4 files are protected. This conditional block lock them back to protect them against any modification
            If destinationWorkbook.Name = "fs000106 310a2020-5, -10, -11.xls" _
                    Or destinationWorkbook.Name = "fs000109 310a2041.xls" _
                    Or destinationWorkbook.Name = "fs000223 335-106-4xx-0.xls" _
                    Or destinationWorkbook.Name = "fs000270 AFT EMS 5A-B.xlsm" Then
                        destinationWorkbook.Protect
            End If
     
            destinationWorkbook.Close True
     
            filename = Dir()  ' Get next matching file
        Wend
     
        OpenAnother = MsgBox("Do you want to update another folder?" & Chr(10) & Chr(10) & "Yes to Open a new folder - No to Quit the application", _
        vbQuestion + vbYesNo, "Updating another folder")
     
        Loop While OpenAnother = 6 '6 is the integer value of vbYes (Yes button of MsgBox): here the code will be repeated if OpenAnother = 6 (yes)
     
        Application.ScreenUpdating = True
     
    End Sub

  7. #7
    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 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Des Exit FOR et des Exit SUB, c'est loin d'être le top.

    Perso, je découperais le code en fonctions distinctes histoire de m'y retrouver: une fonction qui boucle sur les classeurs d'un dossier, une fonction qui ouvre chaque classeur présent, une fonction qui boucle sur les feuilles du classeur, une fonction qui remplace.

    Dans la fonction qui remplace, j'utiliserais une plage Excel plutôt qu'un tableau codé en dur (bonjour les modifs le cas échéant), et je ne créerai qu'une plage pour les From et les BY en les mettant côte à côte.

    En pratiquant ainsi, tu te donnes la possibilité de tester chaque fonction séparément du reste du code et tu circonscris beaucoup mieux tes erreurs. Et nous pourrons beaucoup mieux t'aider à trouver le problème car il sera isolé dans une petite procédure/fonction.

    Avec le code que tu donnes, tu dois à chaque fois lancer toute ta procédure, et si nous voulons t'aider, nous devrons recréer le même environnement que toi pour y arriver...
    "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...
    ---------------

  8. #8
    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
    C'est la meilleure solution que j'aie trouvée. Je vais faire des tests pour voir d'où vient le problème. J'essaierai de compartimenter plus le code. Mon problème c'est que ce code a marché jusque là et qu'avant de partir vendredi il fonctionnait :/

  9. #9
    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 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Sur quelles lignes ne fonctionne-t-il plus?
    Entre-t-il en mode debug?
    As-tu testé le mode pas à pas? Cliquer dans la procédure principale puis F8 pour exécuter ligne par ligne. Cela permet souvent de découvrir l'erreur.

    Tu dis que cela fonctionnait jusqu'à vendredi. Cela voudrait donc dire que quelque chose a changé depuis vendredi... (nouvelle machine, lettres de disque modifiées, connexion réseau problématique, ...).

    Dans un code de 200 lignes (une horreur), une erreur se glisse vite là où on ne l'attend pas, et plus la proc est longue plus il est malaisé de s'y retrouver
    "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. #10
    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
    Sur quelles lignes ne fonctionne-t-il plus?
    Il s'exécute de bout en bout sans erreur et ne plante que ce soit en exécution normale ou pas à pas.

    Tu dis que cela fonctionnait jusqu'à vendredi. Cela voudrait donc dire que quelque chose a changé depuis vendredi... (nouvelle machine, lettres de disque modifiées, connexion réseau problématique, ...).
    Rien n'a changé justement

    Le code choisit le dossier puis ouvre chaque fichier. Toutes les variables du tableau passent bien dans le replace mais sans effet...

    Sinon j'essaye de définir le tableau à partir d'une plage mais cela semble assez compliqué.

  11. #11
    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 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Si ton code fonctionnait avant, n'y change rien. Il sera toujours temps de le modifier plus tard.

    Tu dis que tes variables passent bien dans le replace... => Ca veut dire que tu as travaillé en mode débug ( F8)?

    Si oui et que tu passes bien sur chaque replace, c'est qu'il ne trouve pas la chaîne du replace...

    Je vois que tu as mis MatchCase à True... Ta feuille s'appelle bien Outillage, elle n'a pas été renommée? Tu n'as pas inséré ou supprimé des colonnes ou des lignes de sorte que $M$2 ne soit plus trouvé?
    "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...
    ---------------

  12. #12
    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
    Ce sont des documents standard ils ne doivent pas bouger de plus le lien fonctionne...

    J'ai commencé à compartimenter mon code. Pour définir le tableau je peux tenter une boucle for comme en langage C.

  13. #13
    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 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Dis...

    Tu es sûr de ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ToReplace(2) = "Outillage'!$M$10:$U$500;3;"
    Il n'y aurait pas un ' de trop juste avant le !? (Je ne sais pas vérifier car c'est peut-être un nom d'onglet avec espace, vu que tu remplaces une partie de la formule (xlPart))

    Cela étant, si tu veux compartimenter ton code, l'idée est d'utiliser une table Excel et de boucler sur les lignes de cette table. Tu sors ainsi tes notions métiers du code (le hard coding (= mettre en dur des valeurs dans le code), c'est le mal).
    Procède de même pour tester si tes classeurs font partie de la liste des classeurs verrouillés ou pas (cela étant, tu peux utiliser Unprotect sur un classeur non verrouillé, ça ne plante pas le code).

    Cela étant, tu ne dis pas si ton test est concluant en pas à pas sur le replace. En posant un point d'arrêt sur cette ligne de code, tu peux vérifier que les valeurs à remplacer sont bien celles qui sont présentes dans le classeur. Comme tu ne dis pas si tu fais ce test ni comment tu le fais, ça devient très délicat de continuer à t'aider (genre: on a un peu beaucoup l'impression de perdre son temps)...
    "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...
    ---------------

  14. #14
    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
    Il n'y aurait pas un ' de trop juste avant le !? (Je ne sais pas vérifier car c'est peut-être un nom d'onglet avec espace, vu que tu remplaces une partie de la formule (xlPart))
    En fait c'est la syntaxe Excel pour les signets xD

    Cela étant, si tu veux compartimenter ton code, l'idée est d'utiliser une table Excel et de boucler sur les lignes de cette table. Tu sors ainsi tes notions métiers du code (le hard coding (= mettre en dur des valeurs dans le code), c'est le mal).
    Procède de même pour tester si tes classeurs font partie de la liste des classeurs verrouillés ou pas (cela étant, tu peux utiliser Unprotect sur un classeur non verrouillé, ça ne plante pas le code).
    C'est ce à quoi je pensais. Merci du conseil

    Cela étant, tu ne dis pas si ton test est concluant en pas à pas sur le replace. En posant un point d'arrêt sur cette ligne de code, tu peux vérifier que les valeurs à remplacer sont bien celles qui sont présentes dans le classeur. Comme tu ne dis pas si tu fais ce test ni comment tu le fais, ça devient très délicat de continuer à t'aider (genre: on a un peu beaucoup l'impression de perdre son temps)...
    En fait si j'ai répondu un peu plus haut: le test est concluant. Le code fonctionne bien en pas à pas et on voit que les valeurs transmises à la fonction replace sont toutes correctes.

    Pour l'instant j'ai compartimenté le code et j'ai constaté que même réduit au strict minimum le fonctionnement du code est le même : un remplacement quand il veut bien sinon il ne fait rien...

    Mon code complet avec compartimentation :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
    Option Explicit
    Dim folder As Variant 'Folder containing all the Workbooks
    Dim Continue As Integer
    Dim filename As String 'filename contains folder name and file extension concatenated into one string
    Dim OpenF As Boolean
    Dim destinationWorkbook As Workbook 'destinationWorkbook will change at each iteration of while
    Dim x As Integer, y As Integer
    Dim ToReplace(1 To 12) As String 'bad parts of links
    Dim By(1 To 12) As String 'to replace by the parts contained in this string
    Public Sub Update_HYPERLINKS_InAllWorkbooksInFolder()
     
        Application.DisplayAlerts = False 'Disables popup warnings
     
        Dim OpenAnother As Integer
        OpenAnother = 7 '7 is the integer value of vbNo (No button of MsgBox)
     
        OpenF = False
        'Do
     
        OpenF = OpenFilesInFolder
     
        While OpenF = True And Len(filename) <> 0
     
            Set destinationWorkbook = Workbooks.Open(folder & filename)
     
            ReplaceString
     
            destinationWorkbook.Close True
     
            filename = Dir()  ' Get next matching file
        Wend
     
        'OpenAnother = MsgBox("Do you want to update another folder?" & Chr(10) & Chr(10) & "Yes to Open a new folder - No to Quit the application", _
        'vbQuestion + vbYesNo, "Updating another folder")
     
        'Loop While OpenAnother = 6 '6 is the integer value of vbYes (Yes button of MsgBox): here the code will be repeated if OpenAnother = 6 (yes)
     
    End Sub
    Function OpenFilesInFolder() As Boolean
     
    folder = SelectingFolderToUpdate 'puts into folder the path of the selected folder via the dialog box
        filename = Dir(folder & "*.xls", vbNormal)
     
        If folder = "\\ablgcvs0246\photo\" Then
            Continue = MsgBox("This is the photo folder. Please make sure there is a copy up to date in 'Archive' before editing" _
            & Chr(10) & Chr(10) & "OK to Continue - Cancel to Exit (Cancel if you are not sure 'Archive' is up to date)", _
            vbExclamation + vbOKCancel, "Checking the files are safe before going ahead")
            If Continue = 1 Then
                OpenFilesInFolder = True
            Else
                OpenFilesInFolder = False
            End If
        ElseIf VarType(folder) = vbString Then
            OpenFilesInFolder = True
        Else
            OpenFilesInFolder = False
        End If
     
    End Function
    Function SelectingFolderToUpdate() As Variant
     
    Dim Answer As Variant
    Answer = 2
     
        With Application.FileDialog(msoFileDialogFolderPicker)
     
            .Title = "Selecting the folder containing the files to update" 'Defines dialog box title
     
            Do 'This loop allows to change the selected folder by clicking cancel button
                .Show 'Displays dialog box
     
                If .SelectedItems.Count > 0 Then 'Displays selected folder (SelectedItem)
                    Answer = MsgBox("Path of selected folder :" & Chr(10) & Chr(10) & .SelectedItems(1) & "\" _
                    & Chr(10) & Chr(10) & "OK to Save  -  Cancel to Select another one", _
                    vbOKCancel + vbInformation, "Selecting Folder to Update")
     
                    SelectingFolderToUpdate = .SelectedItems(1) & "\" 'Returns path of selected folder
     
                Else
                    SelectingFolderToUpdate = Answer 'returns answer1 which allows to handle cancel case
                    Exit Do
                End If
     
            Loop While Answer = 2
     
        End With
     
    End Function
    Sub ReplaceString()
     
            UnprotectFiles
     
            Cells.Replace What:="M$10", Replacement:="M$2" ', '_
                'LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, MatchByte:=False, _
                'SearchFormat:=True, ReplaceFormat:=False
     
            Selecting_RCD_or_TOP_ASSY_or_WorkSheet1 'Function which tests existence of RCD tab and selects it if it does
                'or selects TOP ASSY or the first tab otherwise
     
            ProtectFiles
    End Sub
    Sub UnprotectFiles()
    '4 files are protected. This conditional block unlock them
            If destinationWorkbook.Name = "fs000106 310a2020-5, -10, -11.xls" _
                    Or destinationWorkbook.Name = "fs000109 310a2041.xls" _
                    Or destinationWorkbook.Name = "fs000223 335-106-4xx-0.xls" _
                    Or destinationWorkbook.Name = "fs000270 AFT EMS 5A-B.xlsm" Then
                        destinationWorkbook.Unprotect
            End If
    End Sub
    Sub Selecting_RCD_or_TOP_ASSY_or_WorkSheet1()
     
    Dim i As Integer, j As Integer
    Dim RCD_Selected As Boolean, TOP_ASSY_Selected As Boolean
     
     
    i = 1
    j = 1
    RCD_Selected = False 'will be false while RCD tab will not be selected or true if RCD tab is selected
    TOP_ASSY_Selected = False 'same as above for TOP_ASSY tab
     
    Do
        If Worksheets(i).Name = "RCD - QM-F1" Then
            Worksheets("RCD - QM-F1").Select
            RCD_Selected = True 'indicates that RCD is now selected
        Else
            i = i + 1
        End If
     
    Loop While RCD_Selected <> True And i <= 2
     
        If RCD_Selected <> True Then
            Do
                If Worksheets(j).Name = "TOP ASSY" Then
                    Worksheets("TOP ASSY").Select
                    TOP_ASSY_Selected = True 'indicates that TOP_ASSY is now selected
                ElseIf Worksheets(j).Index < Worksheets.Count Then 'j is incremented only if the worksheet index is < to the total
                    j = j + 1
                Else
                    Exit Do
                End If
     
            Loop While TOP_ASSY_Selected <> True And Worksheets(j).Index <= Worksheets.Count
        End If
     
        If RCD_Selected <> True And TOP_ASSY_Selected <> True Then 'if there is no RCD or TOP_ASSY tab, the first tab will be selected
            Worksheets(1).Select
        End If
     
    End Sub
    Sub ProtectFiles()
    '4 files are protected. This conditional block lock them back to protect them against any modification
            If destinationWorkbook.Name = "fs000106 310a2020-5, -10, -11.xls" _
                    Or destinationWorkbook.Name = "fs000109 310a2041.xls" _
                    Or destinationWorkbook.Name = "fs000223 335-106-4xx-0.xls" _
                    Or destinationWorkbook.Name = "fs000270 AFT EMS 5A-B.xlsm" Then
                        destinationWorkbook.Protect
            End If
    End Sub
    Le code de la fonction replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub ReplaceString()
     
            UnprotectFiles
     
            Cells.Replace What:="M$10", Replacement:="M$2" ', '_
                'LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, MatchByte:=False, _
                'SearchFormat:=True, ReplaceFormat:=False
     
            Selecting_RCD_or_TOP_ASSY_or_WorkSheet1 'Function which tests existence of RCD tab and selects it if it does
                'or selects TOP ASSY or the first tab otherwise
     
            ProtectFiles
    End Sub
    Comme tu peux le voir j'ai essayé de retirer différents arguments pour essayer de voir ce qui n'allait pas. Je ne suis pour l'instant pas plus avancé...

    Sinon j'ai remarqué que même manuellement ctrl+h ne trouve pas toujours : il faut alors choisir le format standard (cela s'est produit une fois je ne suis pas sûr de pouvoir en faire une règle et cela ne m'aide pas pour l'instant).

    Merci de tes conseils Pierre. J'essaye des choses comme le pas à pas et changer les arguments mais pour l'instant je suis complètement bloqué

  15. #15
    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 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Nagel Tha Voir le message
    En fait c'est la syntaxe Excel pour les signets xD[...]
    Non, jamais avec une seule apostrophe.

    Si le nom de l'onglet ne contient pas d'espaces, il ne faut pas d'apostrophes. Si le nom contient des espaces, alors, le nom complet doit être encadré d'apostrophes.

    Ton code montre que tu cherches à remplacer "Outillage'!$M...", ce qui est correct si dans la formule, avant "Outillage", il y a quelque chose avec un espace pour le début de nom de l'onglet. Mais si tu n'as que Outillage, tu ne dois pas mettre d'apostrophes.

    Avec $M$10, tu as aussi ce comportement erratique?
    "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...
    ---------------

  16. #16
    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
    Voici l'argument complet :
    'M:\Service QUALITE\Gestion de l''outillage (calibrated tools)\Calibrated tools\[Liste des outillages calibrés (QM-F61) rev 2.xlsm]Outillage'!$T$10:$U$500
    Il est placé dans une fonction RECHERCHEV

    Ce n'est pas moi qui ai codé la fonction mais je vois qu'elle fonctionne car elle affiche le nom de l'outil si lien et plage de données sont bonnes. Ici ce n'est plus le cas après mise à jour vers le fichier rev 2 (faite avec mon code).

    Mais maintenant vu la difficulté pour moi de dompter .replace je me dis qu'il serait bien plus simple de repartir à zéro en évitant si possible cette méthode aléatoire (comportement aussi erratique avec toutes les chaînes possibles).

    Que me conseillerais-tu pour remplacer un morceau de chaîne placé n'importe où dans le classeur au sein d'une formule qui bien sûr n'est jamais la même ?

  17. #17
    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 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Je me disais bien qu'il manquait quelque chose.

    En fait, personnellement, je n'aime pas du tout la recherche dans d'autres classeurs au travers de formules, que ce soit RECHERCHEV ou autres.

    Je préfère de loin importer les données dans le classeur aussi souvent que nécessaire. Cela peut se faire à la main, bien sûr, mais si les données sont bien organisées (table de données ou à tout le moins plage de données sans fioritures telles que cellules fusionnées ou autres), par liaison des données, MSQuery ou VBA. C'est un jeu d'enfant et c'est bien plus stable, surtout depuis la version 2007. Le plus aisément paramétrable est la technique passant par VBA, selon moi.

    C'est à mon avis beaucoup plus stable que des formules avec des noms à rallonge comme dans le cas que tu cites. Qui plus est, tu rends ton fichier indépendant de la source sauf pour la mise à jour, et si tu paramètres les accès à la source dans une feuille de paramètres, tu es sur du velours lorsque le nom du classeur sera modifié (REV 2 => REV 3, par exemple).
    "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...
    ---------------

  18. #18
    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
    J'ai continué à déboguer toute la journée sans résultat. En plus du pas à pas j'ai mis des Debug.Print avant et après le .Replace et j'ai vérifié la boîte de dialogue de ctrl+h car elle conserve l'historique. Avant et après la méthode, les chaînes sont bien celles que je souhaite mettre dans replace et la boîte de dialogue de ctrl+h les contient bien...sauf que le remplacement ne se fait pas. En fait il s'est fait une fois, je suis allé manger puis plus jamais jusqu'à maintenant...

    J'ai aussi tenté 9 combinaisons possibles de paramètres de .Replace et j'ai vu que cela n'avait aucun effet sauf peut-être MatchByte. Des pistes ?

    Je suis un peu désespéré

    Je viens de refaire un essai qui a mis une toute autre chaîne (celle du chemin de ThisWorkbook) alors que le Debug.Print montre que ça se passe bien et il a changé les ; en , dans la formule également c'est vraiment de la folie. Un ami en info a testé mon code et n'a trouvé aucune erreur sinon...

  19. #19
    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
    Bonjour,

    juste utiliser la méthode   Range.Find   pour chercher dans les formules !

    Une fois une cellule trouvée, utiliser la fonction texte VBA   Replace   et non pas la méthode (cf aide VBA interne) …

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    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)

  20. #20
    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
    Merci pour ton conseil. J'ai regardé un peu la fonction find mais l'exemple de la documentation MS ne marche pas et cela m'a semblé un peu compliqué.

    Ce qui me gêne c'est de devoir utiliser FindNext en même temps pour pouvoir avancer la recherche

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

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, 20h22
  2. Réponses: 4
    Dernier message: 20/10/2010, 20h56
  3. Réponses: 20
    Dernier message: 06/05/2010, 13h32
  4. Stopper le fonctionnement des formules
    Par lipadec dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 13/06/2009, 19h58
  5. fonction replace avec des guillemets
    Par mapmip dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/01/2009, 09h17

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