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 :

Somme d'une cellule sur deux dans une plage ? [XL-2003]


Sujet :

Excel

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Somme d'une cellule sur deux dans une plage ?
    Bonjour,

    J'ai une colonne qui contient deux types d'information, une fois sur deux.

    Je voudrais pouvoir faire la somme de chaque type de cellule, donc faire une somme d'une cellule sur deux dans ma colonne.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    AC6 = 3
    AC7 = 5
    AC8 = 4
    AC9 = 1
    AC10 = 9
    AC11 = 0
     
    SOMME1 = AC6 + AC8 + AC10
    SOMME2 = AC7 + AC9 + AC11
    Actuellement, j'ai une formule comme ça :
    =SOMME(AC6+AC8+AC10+AC12+AC14+AC16+AC18+AC20+AC22+AC24+AC26+AC28+
    AC30+AC32+AC34+AC36+AC38+AC40+AC42+AC44+AC46+AC48+AC50+AC52+
    AC56+AC58+AC60+AC62+AC64+AC66+AC68+AC70+AC72+AC74+AC86+AC89+
    AC91+AC93+AC95+AC97+AC99+AC101+AC103+AC105+AC107+AC109+AC112+
    AC114+AC116+AC118+AC120+AC122+AC124+AC128+AC130+AC132+AC134+
    AC136+AC143+AC149+AC161+AC163+AC165+AC167+AC169+AC171+AC173+
    AC177+AC179+AC181+AC183+AC185+AC187+AC189+AC195+AC199+AC201+
    AC203+AC205+AC207+AC209+AC211+AC213+AC215+AC217)
    Que je dois mettre à jour lorsque j'ajoute des lignes dans mon tableau...

    C'est pourquoi je voudrais pouvoir utiliser des plages et compter une cellule sur deux dans cette plage.

    Savez-vous comment faire ?

    Merci,
    ZiP

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bjr,
    Pour m'exercer, j'ai essayé de faire une fonction qui permet ce type de calcul pour la colonne AC, à partir de la ligne 6 jusque la dernière ligne utilisée de la colonne. donc tu peux rajouter autant de ligne que tu veux la fonction va les prendre en compte.
    Dans l'éditeur VBA (ALT+F11) tu copie dans un module cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function calc1sur2() As Long
    Dim i As Long, vval As Long
     
    Application.Volatile
     
    calc1sur2 = 0
     
    For i = 6 To Sheets(1).Range("AC65000").End(xlUp).Row Step 2
      vval = Range("AC" & i).Value
      calc1sur2 = calc1sur2 + vval
    Next i
     
    End Function
    Et dans la cellule qui reçoit le resultat tu met :et tu valides par Entrée.
    normalement elle affiche le résultat et si tu insere d'autre chiffre elle recalcule.
    Attention elle va toujours calculer à partir de la cellule AC6. je vais essayer d'adapter ( mais je promet rien)
    @+

  3. #3
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    re,
    bon ben j'ai adapter voila le nouveau code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function calc1sur2(ligndeb As Long) As Long
    Dim i As Long, vval As Long
    Application.Volatile
    calc1sur2 = 0
    For i = ligndeb To Activesheet.Range("AC65000").End(xlUp).Row Step 2
      vval = ActiveSheet.Range("AC" & i).Value
      calc1sur2 = calc1sur2 + vval
    Next i
    End Function
    C parreil que tout à l'heure sauf qu'il faut mettre dans la parenthèse le numéro de la ligne d'ou on veut commencer le calcul. Par exemple pour commencer le calcul à partir de la ligne 10 :@+

  4. #4
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Je ne savais pas que l'on pouvait utiliser des fonctions VBA comme formule dans une cellule Excel !

    Par contre, je ne veux pas aller jusqu'à la dernière lignes car, j'ai d'autres informations sous mon tableau, je souhaiterai utiliser une plage.

    Mais sachant que l'on peut utiliser des fonctions VBA comme formule, je vais pouvoir m'en sortir facilement

    Merci,
    ZiP

  5. #5
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Re,
    bon voila la dernière version
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function calc1sur2(ligndeb As Long, numcol As Long, saut As Byte) As Long
    Dim i As Long, vval As Long
     
    Application.Volatile
    calc1sur2 = 0
    For i = ligndeb To ActiveSheet.Cells(65000, numcol).End(xlUp).Row Step saut
      vval = ActiveSheet.Cells(i, numcol).Value
      calc1sur2 = calc1sur2 + vval
    Next i
    End Function
    donc il suffit de lui dire dans l'ordre :
    1) la ligne de départ
    2) le numéro de la colonne où on veut faire le calcul
    3) combien de cellule on saute.
    Donc pour toi on commence le calcul en AC6 et on saute 2 lignes, tu dois mettre dans la cellule qui attends le résultat : pour commencer en AC7 etc...

    Voila c une idée il y a certainement mieux mais c'était un bel exercice pour une première fonction faite maison

    @+

    EDIT: j'avais pas vu ta réponses, ben de rien

  6. #6
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Serait-il possible de passer que deux paramètres : plage et saut.

    Comme par exemple : =calc(AC6:AC217,2)

    Je ne sais pas trop comment utiliser des plages sous cette forme en VBA.

    Merci,
    ZiP

  7. #7
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    C'est peux-être possible, mais là je ne sais pas faire, mais tu peux rajouter un critère (peux-etre sa fait beaucoup, mais soyons fou )
    critere 1 = ligne de début
    critere 2 = ligne de fin
    critere 3 = numéro de la colonne
    critere 4 = saut de ligne

    donc le code serait celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function calc1sur2(ligndeb As Long, lignfin As Long, numcol As Long, saut As Byte) As Long
    Dim i As Long, vval As Long
     
    Application.Volatile
    calc1sur2 = 0
    For i = ligndeb To lignfin Step saut
      vval = ActiveSheet.Cells(i, numcol).Value
      calc1sur2 = calc1sur2 + vval
    Next i
    End Function
    et dans la cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =calc1sur2 (6;217;29;2)
    c toujours çà

  8. #8
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Oui, on peut dépanner comme ça mais quand tu arrives à des cellules comme FH125

    Quelqu'un a-t-il une idée pour utiliser des plages de cellules en VBA ?

    Merci,
    ZiP

  9. #9
    Membre émérite
    Avatar de cb_60
    Homme Profil pro
    Chargé de mission technique
    Inscrit en
    Juillet 2007
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé de mission technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 253
    Points : 2 375
    Points
    2 375
    Billets dans le blog
    14
    Par défaut
    Bonjour
    cela doit fonctionner! ( sans VBA)
    cellule paires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((MOD(LIGNE(A1:A200);2)=0)*A1:A200)
    cellules impaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((MOD(LIGNE(A1:A200);2)<>0)*A1:A200)

  10. #10
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Je viens de tester, ça marche bien et c'est plus simple d'utilisation que la formule via VBA !

    Je ne savais pas qu'on pouvait procéder ainsi, merci rvtoulon !

    ZiP

  11. #11
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bjr, je pense avoir une solution avec ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function calc1sur2(Celdeb As Range, celfin As Range, saut As Byte) As Long
    Dim i As Long, vval As Long, numcol As Long
     
    Application.Volatile
    calc1sur2 = 0
    numcol = Celdeb.Column
    For i = Celdeb.Row To celfin.Row Step saut
     
      vval = ActiveSheet.Cells(i, numcol).Value
      calc1sur2 = calc1sur2 + vval
    Next i
    End Function
    dans la cellule qui attends le résultat :Tu remarques le ";" et non pas le ":" pour définir la plage.

    La formule de cb60 est superbe, mais comme je maitrise un peu mieux vba et que je connais moins sommprod, je pense que je vais me pencher un peu plus sur cette fonction.

    @+

  12. #12
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour rvtoulon,

    On y est presque pour le VBA, je suis presque sûr que tu vas nous donner une prochaine version avec une plage en ":" !

    Merci,
    ZiP

  13. #13
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Re,
    bon ben çà y est c un peu tirer par les cheveux mais çà fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function calc1sur2(plage As Range, saut As Byte) As Long
    Dim i As Long, vval As Long, numcol As Long, derlign As Long
     
    Application.Volatile
    calc1sur2 = 0
    numcol = plage.Column
    derlign = plage.Row + plage.Rows.Count - 1
    For i = plage.Row To derlign Step saut
       vval = ActiveSheet.Cells(i, numcol).Value
      calc1sur2 = calc1sur2 + vval
    Next i
    End Function
    dans la cellule qui attend le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =calc1sur2(AC6:AC217;2)

    @+

  14. #14
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Je te l'avais dit !

    Merci,
    ZiP

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2012, 14h50
  2. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  3. colorer une ligne sur deux dans une listbox
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/08/2010, 13h59
  4. Réponses: 3
    Dernier message: 21/03/2008, 19h47
  5. Réponses: 3
    Dernier message: 13/12/2007, 14h25

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