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 :

[VBA-E] ecrire une formule en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut [VBA-E] ecrire une formule en vba
    Bonjour a tous,

    Au fait je voudrais ecrire une formule en derniere ligne de mon tableau, en dessous de chacune des colonnes, ma formule est

    SOMMEPROD(1*(D6 : D110<>0)) (par exemple)

    j ai ecrit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim r As Integer
    Dim c As Integer
    r = Range("b5").End(xlDown).Row
    c = Range("b5").End(xlToRight).Column
    For i = 4 To c
    Cells(r + 1, i).FormulaR1C1 = "=SOMMEPROD(1*(" & (Cells(6, i), Cells(r, i)).Address & "<>0))"
    Next i
    End Sub
    Qu est ce qui cloche dans ce code ?

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Huubb
    ..
    Qu est ce qui cloche dans ce code ?
    ben déjà c'est pas le bon formula...
    Pourquoi autant de propriétés 'Formula' différentes ?

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Ok,

    J ai du coup remplacé mon SOMMEPROD par SUMPRODUCT,
    mais ca coince toujours !?

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    relis le lien en plus de la "langue" qui différentie les formules tu trouvera aussi la méthode d'adressage ... ! R1C1 ou A1

    un truc simple pour savoir que mettre dans ton champ formula.. saisie la formule sous excel, place toi sur la cellule contenant la formule, passe dans l'editeur de macro par un ALT F11, puis dans la fenêtre exécution par un CTRL G, puis saisi
    Citation Envoyé par fenêtre execution
    ?ActiveCell.formula
    valide par entrée et observe le résultat...(à comparer à la chaine de caractére que tu génére pour mettre dans ton champ formula...)

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Merci pour le tuyeau ctrl G

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?ActiveCell.formula
    =SUMPRODUCT(1*(E6:E110<>0))
    Par ailleurs j avais oublie un range avant (ma plage de cellule).Address, alors forcément...
    mais je t avoue que je persiste a ne pas comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim r As Integer
    Dim c As Integer
    r = Range("b5").End(xlDown).Row
    c = Range("b5").End(xlToRight).Column
    For i = 4 To c
    Cells(r + 1, i).FormulaR1C1 = "=SUMPRODUCT(1*(" & Range(Cells(6, i), Cells(r, i)).Address & "<>0))"
    Next i
    End Sub
    dans le code : FormulaR1C1, SUMPRODUCT, Address tout est en anglais ca devrait passer !

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    puisque tu es en FormulaR1C1, autant s'y conformer ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=SUMPRODUCT(1*(R6C" & i & ":R" & r & "C" &  i & " <>0))"

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Sauf que ta formule n'est pas en R1C1...

    Edit --> Grillé par cafeine qui, de plus, est plus explicite que moi.

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    ben rajoute la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    debug.print  "=SUMPRODUCT(1*(" & Range(Cells(6, i), Cells(r, i)).Address & "<>0))"
     
    Cells(r + 1, i).FormulaR1C1 = "=SUMPRODUCT(1*(" & Range(Cells(6, i), Cells(r, i)).Address & "<>0))"
    Debug.print (c'est la même chose que le ? dans la fenêtre exécution...et)vérifi donc ta chaine de caractére dans la fenêtre exécution...

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Aahh ! d accord....

    suffisait de virer le R1C1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(r + 1, i).Formula = "=SUMPRODUCT(1*(" & Range(Cells(6, i), Cells(r, i)).Address & "<>0))"
    ou alors d adapter le code en R1C1, comme cafeine l a fait !

    voila ce qui se passe quand on apprend betement a partir de l enregistreur de macro sans se pencher sur les tutos...

    Merci beaucoup a vous 3
    c est vrai que le debug.print est bien pratique.

    Bon journée.

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

Discussions similaires

  1. [XL-2003] Ecrire une formule dans une cellule en VBA
    Par qi130 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/09/2010, 10h51
  2. [VBA-E] Appliquer une formule si cellule non vide.
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/03/2007, 20h58
  3. Paramétrer une formule en vba
    Par arnogef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/08/2006, 12h48
  4. Copier une formule avec vba
    Par NAMORJOSE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2006, 01h12
  5. [VBA-E] Copier une formule de calcul dans toute la ligne
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/12/2005, 19h18

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