VBA - Problème avec la fonction Substitute

Bonjour,

Avec ma macro ci-dessous, j’essaie de remplacer – sur la feuille ‘’Relevés’’ - les prénoms par des noms neutres. Je pensais pouvoir utiliser la fonction Substitute, mais ça ne fonctionne pas.

Savez-vous ce que je fais de faux ?

Sub Macro1()

With Sheets("Relevés")

    For i = 3 To 8
        For Each Cellule In .Range("B2:B9")
            Cellule = Application.WorksheetFunction.Substitute(Cellule, Range("B" & i), Range("J" & i))
        Next
    Next i

End With

End Sub

Cordialement.

157demo-substitute.xlsm (50.02 Ko)

Bonjour,

Sub Macro1()
    Dim B As Worksheet, Cellule As Range, i%
    Set B = Worksheets("Base")
    With Sheets("Relevés")
        For Each Cellule In .Range("B2:B9")
            For i = 3 To 10
                Cellule = Replace(Cellule, B.Cells(i, 2), B.Cells(i, 10))
            Next i
        Next Cellule
    End With
End Sub

Cordialement.

Salut MFerrard,

Merci beaucoup pour ta réponse : ça fonctionne à merveille

Bon, j'aurais bien aimé comprendre pourquoi mon essai ne passe pas, mais c'est secondaire, puisque j'ai une solution.

Amicalement.

Je dois avouer que je n'en avais pas idée, mon inversion de l'imbrication est motivée par un déroulement plus rapide sous cette forme, de même que l'utilisation de la fonction VBA équivalente à celle d'Excel, mais cela n'aurait pas dû empêcher de fonctionner...

Après de nombreux tests, le point de blocage unique réside ici :

        Cellule.Value =...

Tu es dans un cas où Excel a besoin de la référence explicite à la propriété Value pour appliquer le changement de valeur...

Cordialement.

Wow, super

Effectivement qu'en ajoutant .Value à la première des deux variables Cellule, mon code fonctionne à merveille. Le voici corrigé :

Sub Macro1()

With Sheets("Relevés")

    For i = 3 To 10
        For Each Cellule In .Range("B2:B9")
            Cellule.Value = WorksheetFunction.Substitute(Cellule, Range("B" & i), Range("J" & i))
        Next
    Next i
End With

End Sub

Il y a des années que je cherche une utilité à cette instruction .Value, voilà qui est fait.

Encore merci pour ton aide et très bonne journée

Je n’y comprends plus rien !

Afin de me souvenir de ce que j’avais appris ci-dessus, j’ai voulu créer un fichier exemple.

Comme j’avais voulu simplifier la chose et que j’avais reporté toutes les données sur une seule feuille, j’ai eu la surprise de voir que mon code fonctionnait sans l’instruction .Value !!

Je me suis dit que le problème venait du fait que mes premiers essais ci-dessus avaient été réalisés sur deux feuilles et j’ai tenté la chose. A nouveau j’ai la surprise que ça passe également sans l’instruction .Value !!

J’ai beau retourner la chose dans tous les sens, je ne vois pas ce qui fait – entre mes deux codes ‘Macro1’ dans mon premier fil et ‘Value_obligatoire’ ci-dessous – la différence.

Sub Value_obligatoire()
Dim i As Byte, Cellule As Range

With Sheets("Relevés")
    For i = 2 To 9
        For Each Cellule In .Range("E2:E20")
            Cellule = WorksheetFunction.Substitute(Cellule, Range("B" & i), Range("C" & i))
        Next
    Next i
    .Activate
End With

End Sub

Je n’aime pas trop les mystères d’Excel, alors je me permets de revenir à la charge avec cela.

Chaleureusement.

bonjour,

Je pense que c'est plutôt un problème de déclaration de variable.

Cellule n'a que l'apparence d'un Range mais pas le Type

Non déclarée dans le premier cas "Cellule" est un variant non affecté et se perd dans le décor

Non déclarée mais avec .Value ça force quelque part une auto-conversion d'Excel qui la "trans-type" en Range, mébon...

Dans les autres cas pas besoin de Value pour un Range.

A+

Salut Galopin,

En plein dans le mille

Effectivement que le problème vient de la déclaration ou non des variables. Comme quoi les problèmes (ou les solutions) dans les macros ne viennent pas toujours d'où l'on pense.

Très bonne fin de journée.

Rechercher des sujets similaires à "vba probleme fonction substitute"