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 :

Formule R1C1 en VBA avec variable [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut Formule R1C1 en VBA avec variable
    Bonjour,

    Je désire réaliser un calcul au niveau de la cellule P2, et ensuite récupérer le résultat de ce calcul afin de le faire afficher.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Range("P2").Select
        ActiveCell.FormulaR1C1 = _
            "=SUMIFS(BDD!R3C3:R1048576C3,BDD!R3C1:R1048576C1,"">=""&RC[-1],BDD!R3C1:R1048576C1,""<=""&R[-1]C[-1]+1)"
    Le souci c'est qu'il s'agit de la formule sans les variables à l'intérieur, du coup j'ai essayé de faire en fonction de la formule excel ci contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       =SOMME.SI.ENS(BDD!$C$3:$C$1048576;BDD!$A$3:$A$1048576;">="&O2;BDD!$A$3:$A$1048576;"<="&O1+1)
    le but étant de transformer cette formule afin d'y intégrer les variables R1 et R2, ce qui me donne ceci :
    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
    e = "AY"
        f = "BA"
            
        WX1 = Application.ConvertFormula(Formula:=e & "3", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        WX2 = Application.ConvertFormula(Formula:=e & "1048576", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        R1 = WX1 & ":" & WX2
        
        WC1 = Application.ConvertFormula(Formula:=f & "3", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        WC2 = Application.ConvertFormula(Formula:=f & "1048576", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        R2 = WC1 & ":" & WC2
        
            'Calcul du total en Kg pour la période
            With Sheets("Rapport Semaine")
            Range("P2").Select
            ActiveCell.FormulaR1C1 = _
            "=SUMIFS(BDD!" & R2 & "," & "BDD!" & R1 & "," & "" >= "" & "RC[-1]" & "," & "BDD!" & R1 & "," & "" <= "" & "R[-1]C[-1]+1)1"            
                Total = "Label" & (j + 1)
                .OLEObjects(Total).Object.Caption = Range("P2").Value
    
            End With

    Le truc c'est que quand j'affiche, je trouve comme résultat ==> TRUE (je vois pas d'où peut venir le problème.... à moins que j'ai mal renseigner la synthaxe...)

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    J'ai essayé ça, sans réel succès, je continue d'essayer !

    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
        e = "AY"
        f = "BA"
     
        WX1 = Application.ConvertFormula(Formula:=e & "3", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        WX2 = Application.ConvertFormula(Formula:=e & "1048576", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        R1 = WX1 & ":" & WX2
        R11 = e & "3" & ":" & e & "1048576"
     
        WC1 = Application.ConvertFormula(Formula:=f & "3", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        WC2 = Application.ConvertFormula(Formula:=f & "1048576", FromReferenceStyle:=xlA1, ToReferenceStyle:=xlR1C1)
        R2 = WC1 & ":" & WC2
        R22 = f & "3" & ":" & f & "1048576"
     
            'Calcul du total en Kg pour la période
            With Sheets("Rapport Semaine")
            Range("P2").Select
            ActiveCell.FormulaLocal = _
        "=SOMME.SI.ENS(BDD!" & R22 & ";BDD!" & R11 & ";" >= "&O2;BDD!" & R11 & ";" <= "&O1+1)"
     
                       Total = "Label" & (j + 1)
                .OLEObjects(Total).Object.Caption = Range("P2").Value
     
            End With

  3. #3
    Expert éminent
    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
    Par défaut
    Bonjour !

    Citation Envoyé par Ghost0000 Voir le message
    =SOMME.SI.ENS(BDD!$C$3:$C$1048576;BDD!$A$3:$A$1048576;">="&O2;BDD!$A$3:$A$1048576;"<="&O1+1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaLocal = "=SOMME.SI.ENS(BDD!" & VAR1 & ":" & VAR2 & ";BDD!" & VAR3 & ":" & VAR4 & ";"">=""&O2;BDD!$A$3:$A$1048576;""<=""&O1+1)"
    VAR1 à 4 représentant des noms de variables; il faut doubler les guillemets au sein d'une chaîne

    Dans un environnement international, mieux vaut utiliser la propriété Formula et la formule de calculs native en anglais …

    Consulter aussi l'aide VBA de la propriété Address

    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, …

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    Merci de ta réponse !! Mais le résultat affiche toujours "FALSE", je comprend pas pourquoi...


    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
     
        VAR1 = f & "3"
        VAR2 = f & "1048576"
        VAR3 = e & "3"
        VAR4 = e & "1048576"
     
            'Calcul du total en Kg pour la période
            With Sheets("Rapport Semaine")
            Range("P2").Select
            ActiveCell.FormulaLocal = "=SOMME.SI.ENS(BDD!" & VAR1 & ":" & VAR2 & ";BDD!" & VAR3 & ":" & VAR4 & ";" >= "&O2;BDD!" & VAR3 & ":" & VAR4 & ";" <= "&O1+1)"
     
                Total = "Label" & (j + 1)
                .OLEObjects(Total).Object.Caption = Range("P2").Value
     
            End With

    J'ai utilisé ça et le résultat est passer de FALSE à TRUE, à mon avis cela proviens d'ici (en gras) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            ActiveCell.FormulaLocal = "=SOMME.SI.ENS(BDD!" & VAR1 & ":" & VAR2 & ";BDD!" & VAR3 & ":" & VAR4 &  ";" >= "&O2;BDD!"  & VAR3 & ":" & VAR4 & ";"  & "<= &O1+1)" 
    On peut comparer facielment avec cette formule (EXCEL pas de VBA)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI.ENS(BDD!$C$3:$C$1048576;BDD!$A$3:$A$1048576;">="&O2;BDD!$A$3:$A$1048576;"<="&O1+1)

  5. #5
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Par défaut
    Citation Envoyé par Ghost0000 Voir le message
    Merci de ta réponse !! Mais le résultat affiche toujours "FALSE", je comprend pas pourquoi...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            ActiveCell.FormulaLocal = "=SOMME.SI.ENS(BDD!" & VAR1 & ":" & VAR2 & ";BDD!" & VAR3 & ":" & VAR4 & ";" >= "&O2;BDD!" & VAR3 & ":" & VAR4 & ";" <= "&O1+1)"
    C'est normal les guillemets ne sont toujours pas doublés autour des <= et >=.
    pour le vérifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim maFormule as String
    maFormule = "=SOMME.SI.ENS(BDD!" & VAR1 & ":" & VAR2 & ";BDD!" & VAR3 & ":" & VAR4 & ";" >= "&O2;BDD!" & VAR3 & ":" & VAR4 & ";" <= "&O1+1)"
    'maFormule = "Faux"
    Dans le code ce qui est en rouge est du texte. On voit que <= et >= sont en noir, tu teste donc une inégalité, tu n'écrit pas une chaine de texte.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    Bonjour letienne,

    Je viens de copier-coller ton code, et là ça affiche "FALSE" comme résultat dans la formule, on dirait que ma formule lui convient pas ... je viens de tester différentes variantes de mise en forme, je vois pas d'où peut venir ce problème (avec ou sans guillements)

  7. #7
    Expert éminent
    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
    Par défaut

    Si en appliquant juste la formule sans variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaLocal = "=SOMME.SI.ENS(BDD!$C$3:$C$1048576;BDD!$A$3:$A$1048576;"">=""&O2;BDD!$A$3:$A$1048576;""<=""&O1+1)"
    le résultat n'est pas celui attendu, la formule d'origine est donc à revoir !

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    J'ai vérifier la formule d'origine, le résultat est "2964", donc la formule est exacte, je viens de copier-coller ce que tu viens d'afficher.

    Il faut donc transformer ce machin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaLocal = "=SOMME.SI.ENS(BDD!$C$3:$C$1048576;BDD!$A$3:$A$1048576;"">=""&O2;BDD!$A$3:$A$1048576;""<=""&O1+1)"
    afin d'incorporer mes variables, mais en vba c'est le souci


    Y'a ça qui peut aider, mais franchement, je désespère ! ^^
    https://support.office.com/fr-fr/art...6-611cebce642b

    J'ai lu la partie "Problèmes courants", et je vois vraiment pas... je dois pas lire entre les lignes !

  9. #9
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    Merci de votre aide, il s'agissait d'un problème de guillemets !!

    Je viens de trouver avec le mode pas à pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            ActiveCell.FormulaLocal = "=SOMME.SI.ENS(BDD!" & VAR1 & ":" & VAR2 & ";BDD!" & VAR3 & ":" & VAR4 & ";"">=""&O2;BDD!" & VAR3 & ":" & VAR4 & ";""<=""&O1+1)"

  10. #10
    Expert éminent
    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
    Par défaut




    Comme indiqué dans mon premier message …

  11. #11
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Par défaut
    Merci beaucoup, j'ai du faire une erreur de variable dans ce cas !!!

    Je met à jour 20 graphiques avec cette fonction, juste super !!

    Bonne continuation, vive Développez !

    GK

  12. #12
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Par défaut
    lol

    Citation Envoyé par Marc-L
    il faut doubler les guillemets au sein d'une chaîne
    Citation Envoyé par letienne Voir le message
    C'est normal les guillemets ne sont toujours pas doublés autour des <= et >=.


    Allez bonne continuation

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

Discussions similaires

  1. [Toutes versions] Insertion formule avec variable dans VBA
    Par Suomiland dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/06/2015, 07h30
  2. [XL-2007] ajouter la serie "X" dans un graphique en VBA avec variables pour Ligne et colonne
    Par maxime-a dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/04/2015, 14h40
  3. [Toutes versions] formule vba avec nom de feuille variable
    Par leptitdave dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/08/2009, 11h30
  4. [VBA] Formule avec variables
    Par tuzoenduro dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/02/2008, 17h40
  5. tirage formules en VBA avec excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 23/11/2006, 18h33

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