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

Excel Discussion :

Macro - SUM sous forme de chaîne de caractères


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Macro - SUM sous forme de chaîne de caractères
    Bonjour à tous,
    Merci d'avance à tous ceux qui voudront bien me lire.

    Voici mon problème :

    J'ai un fichier excel, et une macro.
    Dans cette macro, j'ai une boucle, qui travaille sur les cellules d'une plage.
    Lorsque je fais ==> cell.Formula = "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")";
    la formule est bien stockée dans la cellule sous forme de somme.

    Lorsque je fais ==> cell.Formula = cell.Text et que cell.Text contient "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")"
    La cellule prend comme valeur la chaine de caractère, et non son évaluation comme le cas précédent. (C'est pareil avec cell.Value)

    Voici mon script
    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
    Sub evaluate_formulas()
     
    Dim myRange As Range
    Dim cell As Range
     
    Set myRange = ActiveSheet.Range("A1:B10")
    For Each cell In myRange
        If cell.Value = "33333" Then cell.Formula = "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")"
    Next cell
     
     
    For Each cell In myRange
        Debug.Print cell.Text
        If Left(cell.Value, 5) = """=SUM" Then cell.Formula = cell.Text
    Next cell
     
    End Sub
    Avez-vous une idée de la source de mon problème?

    Cordialement,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(cell.Value, 5) = """=SUM" Then cell.Value = cell.Value
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Quelque soit ce que je fasse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Left(cell.Value, 5) = """=SUM" Then cell.Value = cell.Value
    If Left(cell.Value, 5) = """=SUM" Then cell.Formula= cell.Value
    If Left(cell.Value, 5) = """=SUM" Then cell.Value = cell.Text
    If Left(cell.Value, 5) = """=SUM" Then cell.Formula= cell.Text
    Je n'arrive pas a obtenir le même résultat que

    If Left(cell.Value, 5) = """=SUM" Then cell.Value = "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")"

    Pourtant, j'ai vérifié avec un debug.print cell.value comme vu dans mon code, et cell.Value est bien = "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")"

    Dans les quattre premiers cas, je reste avec ma chaîne de caractère.
    Dans le dernier, la formule est évaluée...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je ne pas être bien réveillé... Tu expliques ce que tu n'arrives pas à faire, pas ce que tu veux faire. Qu'est-ce que tu veux obtenir ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ce n'est pas grave ^^

    Eh bien, je souhaiterai que la formule sous forme de chaine : "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")", soit évoluée comme une formule lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(cell.Value, 5) = """=SUM" Then cell.Formula = cell.Value
    (J'ai testé avec un debug.print cell.Value. cell.Value contient bien la chaine que je veux évalué, soit "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")")

    Par exemple, j'ai une plage de cellule A1:B10.
    La cellule A7 contient la chaîne de caractères :"=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")"

    J'ai une macro, avec une boucle sur la même plage de cellule : ActiveSheet.Range("A1:B10")
    Quand la cellule éxaminée sera une cellule qui commence par "=SUM, soit ma cellule A7 en l'occurence, je veux que la chaîne de caractère de la cellule se transforme en une formule tout court.
    "=SUM(A" & cell.Row + 1 & ":A" & cell.Row + 4 & ")" devient alors =SOMME(A8:A11)

    Est-ce clair à présent? ^^'

    Cordialement

  6. #6
    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, bonjour !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With cell
            If IsError(.Value) Then If Left(.Formula, 5) = "=SUM(" Then .Formula = .Formula
        End With

    Pas besoin de boucle ni de test pour l'appliquer directement sur la plage entière :

    With [A1:B10]: .Formula = .Formula: End With


    Et si à l'affichage de la cellule dans la feuille de calculs la formule "SUM" est encadrée par des guillemets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        With cell
            SP = Split(.Formula, """")
            If UBound(SP) > 0 Then If Left(.Formula, 6) = """=SUM(" Then .Formula = SP(1)
        End With
    _______________ ____________________________________ ______________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    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)

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Tout d'abord, merci pour ta réponse =)

    Merci pour l'astuce du With, je ne connaissais pas. Cela me sera très utile!... A condition que je comprenne correctement comment l'utiliser

    Après avoir lu ton bout de code, j'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim cell As Range
    Set cell = ActiveSheet.Range("A1:B10")
     
    With cell
        If IsError(.Value) Then If Left(.Formula, 5) = "=SUM(" Then .Formula = .Formula
    End With
    Cela me sort une erreur sur le IsError

    J'ai également essayé le dernier bout de code.
    J'imagine que la variable SP est un tableau donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim SP(1 To 20) As String
    Quand j'essai de le tester, pour voir comment cela fonctionne, Excel me stoppe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SP = Split(.Formula, """")
    Il me dit que je ne peut pas affecter cela à un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With cell
            SP = Split(.Formula, """")
            If UBound(SP) > 0 Then If Left(.Formula, 6) = """=SUM(" Then .Formula = SP(1)
    End With
    J'ai essayé de déclaré SP sans type particulier, cela ne marche pas non plus.

    Je n'ai pas pu tester ton code correctement donc, mais la seule différence notoire dans le fonctionnement de la macro est que tu choisis de supprimer les guillemets qui encadrent ma chaîne de caractère grâce à la commande split, avant de l'affecter à la formule de ma cellule cell.
    C'est bien cela?

    La résolution de mon code se situe donc dans le split?
    Si c'est ca, je n'ai pas été capable de comprendre comme bien utiliser le split.
    Pourrais-tu m'éclairer plus en détails stp?

    Cordialement,

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

    De mon côté tout fonctionne tel quel sur différentes versions d'Excel ‼

    cell doit correspondre à une cellule …

    Si tu es contraint d'utiliser Option Explicit, alors juste déclarer Dim SP et c'est tout !
    Pas de meilleure explication que l'aide intégrée : sélectionner l'instruction puis appuyer sur la touche !

    Sinon faudra attendre un intervenant disposant de la même version d'Excel …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    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)

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Bonjour =)
    Donc chez toi, ce bout de code seul fonctionne avec mon fichier?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim cell As Range
    Set cell = ActiveSheet.Range("A1:B10")
     
    With cell
        If IsError(.Value) Then If Left(.Formula, 5) = "=SUM(" Then .Formula = .Formula
    End With
    Donc la chaîne de caractères telle que je l'ai écrite est évaluée dans ton fichier correctement?
    Si c'est le cas, serait-il possible de récupérer le fichier que tu as modifié, et sur lequel se trouve cette formule qui fonctionne?

    Cela fait plusieurs jours que je suis dessus, rien n'y fait, je suis presque deséspéré ^^'

    Cordialement

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

    Ah bon, il est où ton fichier ?‼

    De plus le code que t'affiches n'est pas le mien, c'est une version que t'as bidouillée
    et qui plus est tu n'as pas tenu compte de ma remarque dans ma seconde intervention !

    Sinon bien relire ma première intervention car il y a deux cas distincts, si tu ne choisis pas le bon …
    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)

Discussions similaires

  1. Évaluation d'une expression numérique sous forme de chaîne de caractères
    Par InitSreen dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 29/11/2020, 08h43
  2. Réponses: 6
    Dernier message: 20/01/2014, 14h20
  3. Interpréter une formule saisie sous forme de chaîne de caractères
    Par Pozzo dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 29/05/2013, 09h30
  4. Réponses: 17
    Dernier message: 08/12/2008, 12h01
  5. Réponses: 17
    Dernier message: 03/10/2005, 11h16

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