Un String contenant une apostrophe plante REPLACE

Bonjour,

Je travaille sur un classeur qui contient plusieurs feuilles.

Dans ma première feuille je voudrais automatiser l'insertion de cellules (1 par onglet) en bouclant sur les onglets dont la formule serait ='Nom de l'onglet'!A$1.

Pour arriver à mes fins je suis passé par la fonction Replace

.Range("A" & i).Formula = Replace("='¤'!A$1", "¤", Ws.Name)

Problème : Mon code fonctionne très bien sauf si un onglet possède une apostrophe dans le nom...

Dans ce cas, j'ai une erreur 1004.

J'ai cru comprendre que l'apostrophe posait des problèmes mais je ne trouve pas de solution.

Comment contourner ce problème ?

Ci-dessous mon code simplifié.

Merci beaucoup,

Waxscud

Sub Insert_Stats()

    Application.ScreenUpdating = False
    Dim Ws As Worksheet
    Dim i As Integer
    i = 1

    For Each Ws In Worksheets
        With Worksheets("DATA")
            .Rows(i).Insert Shift:=xlDown
            .Range("A" & i).Formula = Replace("='¤'!A$1", "¤", Ws.Name)
            i = i + 1
        End With
    Next Ws

End Sub

Re-bonjour,

J'ai cru comprendre que le problème se réglait avec une double apostrophe et un Replace (deux Replace imbriqués ?) mais ma première tentative n'est pas concluante.

J'ai ajouté avant ma ligne de code centrale la ligne de code suivante :

Ws.Name = Replace(Ws.Name, "'", "''")

Problème : Le texte de ma formule contient du coup deux apostrophes. Mes onglets ne sont pas détectés logiquement.

Merci,

waxscud

Bonjour

Place ton Replace' dans le Replace

      .Range("A" & i).Formula = Replace("='¤'!A$1", "¤", Replace(Ws.Name, "'", "''"))

Si pas ça

Mais je n'ai pas tellement compris ce que tu veux faire

Essaye

.Range("A" & i).Formula = "='" & Replace(Ws.Name, "'", "''") & "'!A$1"

Bonjour Banzai,

Tu as tout à fait compris mon problème.

Il fallait bien insérer un second Replace au sein du premier.

Merci beaucoup !!!

waxscud

Bonjour,

Je ré-ouvre ce sujet car je suis face à un cas de figure similaire.

Je voudrais appliquer à une cellule (U3) une formule logique de type =DATEDIF(Celluletestée;Aujourd'hui;"d") >365 jours.

la macro va boucler sur les différentes lignes des différents onglets (ceci explique le premier Replace) et le résultat de chaque test servira de critère pour un filtre automatique dans mon dernier onglet.

C'est pourquoi je ne peux pas utiliser ici la version VBA de la formule DateDiff mais que j'ai besoin que la formule de base soit transposée dans ma cellule U3.

Voilà ce que j'ai :

Range("U3").Formula = Replace("=DATEDIF('¤'!K2;AUJOURDHUI();"d")>365", "¤", x.Name)

Problème : Le troisième critère de ma fonction DATEDIF donnant l'unité de temps voulu est entre guillemets...

Ceci pose problème et je ne sais pas comment tourner la formule.

Faut-il que j'insère au niveau de ce critère une autre fonction Remplace.

Rq : J'ai essayé de mettre 'd' ou ""d"" => Cela ne marche pas.

Merci pour votre aide

Bonne journée,

waxscu

Bonjour

A tester

  Range("U3").Formula = Replace("=DATEDIF('¤'!K2,TODAY(),""d"")>365", "¤", x.Name)

Bonjour Banzai,

Content de voir que tu es toujours là pour m'assister sur mes petits soucis de langage VBA !

Alors effectivement, en mettant des virgules, ma formule s'inscrit bien dans la cellule cible.

En revanche, au lieu d'afficher VRAI ou FAUX, il est écrit "#NOM?".

Mais lorsque je sélectionne la cellule et que j'appuie sur Entrée, la cellule s'actualise et le résultat du test s'affiche.

Ce problème fait que le filtre automatique passe sur chaque ligne sans voir le test et n'affiche aucune ligne.

Ce doit être encore un détail de rien du tout...

Merci encore,

waxscud

Bonjour

As tu remplacé AUJOURDHUI() par TODAY() ?

Oups,

Effectivement !

Je pensais que cela dépendait de la version d'Excel mais c'est bien ça.

Tout fonctionne

Merci encore pour ton aide et ta réactivité Banzai.

Bonne soirée,

waxscud

Rechercher des sujets similaires à "string contenant apostrophe plante replace"