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 :

FormulaArray - Replace ne fonctionne pas


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut FormulaArray - Replace ne fonctionne pas
    Bonjour à tous,

    Je suis nouveau sur le forum mais je viens régulièrement consulter le forum pour de l'aide dans mes projets. Un grand bravo pour toutes les informations que l'on peut y trouver !

    Je travaille actuellement sur un projet VBA Excel que je veux rendre accessible aux utilisateurs des versions Excel plus anciennes. J'ai une feuille de statistiques dans laquelle je souhaite mettre à jour les formules avec ma macro. Je suis bloqué par la limite de 255 caractères de FormulaArray (pour Excel 2007 par exemple). J'ai lu sur des forums que le moyen de contournement est d'utiliser la fonction Replace. J'ai beau essayer dans tous les sens, je ne parviens pas à mes fins. La fonction Replace ne semble pas avoir d'effet.

    A noter :
    - j'ai essayé de faire manuellement le remplacement dans Excel, cela fonctionne
    - j'ai enregistré une macro lorsque je fais manuellement l'opération de remplacement. Lorsque je tente d'utiliser le code généré, la fonction Replace ne fonctionne pas (aucun remplacement n'est effectué).

    Pouvez-vous m'aider à corriger le code ci-dessous ?

    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
    Sub MAJ_Stats()
     
        Dim Part() As String
        ReDim Part(1 To 3)
     
        Dim DernLig As Integer
        DernLig = 68
     
        For i = 1 To 3
            Part(i) = "SOMME(NB.SI.ENS(" & Sheets(i + 1).Name & "!$C" & DernLig + 1 & ":$AG" & DernLig + 1 & ";Sites[Nom court];" & Sheets(i + 1).Name & "!$C$7:$AG$7;""<>Dim""))"
        Next i
     
        Cells(32, 2).FormulaArray = "=Partie1+Partie2+Partie3"
     
        For i = 1 To 3
            Cells(32, 2).Replace What:="Partie" & i, Replacement:=Part(i), LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        Next i
     
    End Sub
    N'hésitez pas s'il manque certaines informations pour mieux comprendre ma problématique.
    Un grand merci pour votre aide !

    Bonne journée,

    Victor

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour et bienvenue sur le forum,
    Citation Envoyé par Victor456 Voir le message
    Je suis bloqué par la limite de 255 caractères de FormulaArray (pour Excel 2007 par exemple). J
    Avec Excel 2007, je n'ai pas de problème avec ta formule (sauf qu'il faut utiliser la syntaxe anglaise) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub MAJ_Stats()
    Dim DernLig As Integer
    Dim formule As String
        DernLig = 68
        formule = "="
        For i = 1 To 3
          formule = formule & "+SUM(COUNTIFS(" & Sheets(i + 1).Name & "!$C" & DernLig + 1 & ":$AG" & DernLig + 1 & ",Sites[Nom court]," & Sheets(i + 1).Name & "!$C$7:$AG$7,""<>Dim""))"
        Next i
        Cells(32, 2).FormulaArray = formule
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ta réponse Patrice740 !
    J'ai voulu simplifier la problématique avant de poster et du coup, mon exemple n'est plus pertinent. En effet, la formule a une longueur inférieure à 255 caractères dans mon exemple et donc le problème ne se pose pas. Mais, en réalité, la formule que je souhaite utilisée est plus longue.

    Voici le nouveau code qui pose donc vraiment problème :

    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
    Sub MAJ_Stats()
     
        Dim Part() As String
        ReDim Part(1 To 3)
     
        Dim DernLig As Integer
        DernLig = 68
     
        For i = 1 To 3
            Part(i) = "SUM(COUNTIFS(" & Sheets(i + 1).Name & "!$C" & DernLig + 1 & ":$AG" & DernLig + 1 & ";Sites[Nom court];" & Sheets(i + 1).Name & "!$C$7:$AG$7;""<>Dim""))+SUM(COUNTIFS(" & Sheets(i + 1).Name & "!$C" & DernLig + 3 & ":$AG" & DernLig + 3 & ";Sites[Nom court];" & Sheets(i + 1).Name & "!$C$7:$AG$7;""<>Sam"";" & Sheets(i + 1).Name & "!$C$7:$AG$7;""<>Dim""))"
        Next i
     
        Cells(32, 2).FormulaArray = "=Partie1+Partie2+Partie3"
     
        For i = 1 To 3
            Cells(32, 2).Replace What:="Partie" & i, Replacement:=Part(i), LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        Next i
     
    End Sub

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Ta formule est bourrée d'erreurs ....
    Commences par écrire la formule non matricielle (.formula) qui n'est pas erronée !
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Ta formule est bourrée d'erreurs ....
    Commences par écrire la formule non matricielle (.formula) qui n'est pas erronée !
    En effet, j'ai omis de remplacer les ";" des formules en français par des "," pour les formules en anglais. Tu es un peu dur quand tu dis que c'est bourré d'erreurs même si le ";" revient souvent

    Le problème est maintenant résolu ! Cela venait du fait que j'écrivais ma formule en français au lieu d'anglais.

    Merci pour ton aide Patrice740 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 13/06/2014, 09h45
  2. La fonction replace() ne fonctionne pas
    Par bernidupont dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/03/2013, 18h13
  3. méthode replace ne fonctionne pas
    Par toutounesan dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/07/2011, 23h26
  4. Cufon.replace() ne fonctionne pas sous firefox
    Par Saphir09 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/05/2011, 09h05
  5. [Internet Explorer] window.location.replace ne fonctionne pas
    Par Gat- dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/02/2007, 13h15

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