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 - Somme de cellules [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut VBA - Somme de cellules
    Bonjour et merci d'avance pour votre aide.

    Pour présenter mon problème :
    - J'ai une liste de nom dans une colonne A (les noms peuvent être présent une ou plusieurs fois)
    - J'ai une liste de nombre d'heure travaillée (associé à chaque nom) dans une colonne B
    - Ces listes changent chaque mois et sont importées et triées via une macro VBA

    - Je cherche maintenant à reporter dans un colonne C le nombre d'heures totale travaillé par chaque employé.

    Donc
    - si son nom n’apparaît qu'un fois, report de la valeur dans la colonne C ==> ok j'ai réussi
    - si son nom apparaît plusieurs fois, report de la somme des heures de toutes les lignes correspondant à son nom (déjà triées donc l'une en dessous de l'autre) ==> c'est ce que je ne parviens pas à faire.

    Je pars vraiment de zéro et tous mes essais (basés sur des bouts de codes que jai trouvé) sont infructueux et probablement complètement faux. C'est pourquoi je n'ai pas intégré ce que j'ai fais dans ce message.

    Si quelqu'un peut m'orienter, je pourrais ensuite faire des recherches pour adapter et finaliser.

    En vous remerciant

    Stephane

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par spffmax Voir le message
    - si son nom n’apparaît qu'un fois, report de la valeur dans la colonne C ==> ok j'ai réussi
    - si son nom apparaît plusieurs fois, report de la somme des heures de toutes les lignes correspondant à son nom (déjà triées donc l'une en dessous de l'autre) ==> c'est ce que je ne parviens pas à faire.
    Pas besoin de macro pour faire ça.
    Utilise la fonction SOMME.SI.ENS().
    https://support.office.com/fr-FR/art...6-611cebce642b

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    Merci Menhir pour ta réponse !!

    Alors j'ai regardé le fonctionnement de la fonction somme.si.ens mais il me semble que dans ce cas j'ai besoin de connaitre les noms. Or ils changent chaque mois et l'idée et d'automatiser le traitement de ces données.

    De plus, il s'agit là d'une étape dans le traitement. Ensuite je récupérerais ces données pour générer une facture de manière le plus automatique possible.

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    pourquoi ne pas insérer un tableau croisé dynamique???

  5. #5
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Je vais me faire tuer...
    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro1()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim I As Integer 'déclare la variable I (Incrément)
     
    Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
    O.Columns(3).ClearContents 'efface d'éventuelles anciennes données en colonne 3 (=>C)
    DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
    For I = 1 To DL 'boucle sur toutes les lignes I de 1 à DL
        'renvoi dans la cellule ligne I colonne C la valeur de la formule "somme.si"
        O.Cells(I, "C").Value = Application.WorksheetFunction.SumIf(O.Range("A1:A" & DL), O.Cells(I, "A"), O.Range("B1:B" & DL))
    Next I 'prochaine ligne de la boucle
    End Sub

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par spffmax Voir le message
    Alors j'ai regardé le fonctionnement de la fonction somme.si.ens mais il me semble que dans ce cas j'ai besoin de connaitre les noms. Or ils changent chaque mois et l'idée et d'automatiser le traitement de ces données.
    Tu as dis que tu avais déjà une macro pour générer cette liste.

    De plus, il s'agit là d'une étape dans le traitement. Ensuite je récupérerais ces données pour générer une facture de manière le plus automatique possible.
    Le plus simple serait que la macro implante la fonction SOMME.SI.ENS() dans les cellules concernée.
    Ca peut se faire en une seule ligne de code pour l'ensemble. Je ne vois pas de solution plus simple.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Tu as dis que tu avais déjà une macro pour générer cette liste.
    En effet, je reçois tous les mots des fichiers d'opérateur, que je fais télécharger dans mon fichier de manière automatique. Mais le nombre d'opérateur est toujours différent et ne sont pas toujours les même.


    Citation Envoyé par Menhir Voir le message
    Le plus simple serait que la macro implante la fonction SOMME.SI.ENS() dans les cellules concernée.
    Ca peut se faire en une seule ligne de code pour l'ensemble. Je ne vois pas de solution plus simple.

    Ok merci pour le conseil utile. J'ai réussi à intégrer cette formule sous forme de code grâce à vous et à Thautheme.

    Meci pour votre aide

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    Citation Envoyé par Thautheme Voir le message
    Bonjour le fil, bonjour le forum,

    Je vais me faire tuer...
    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro1()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim I As Integer 'déclare la variable I (Incrément)
     
    Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
    O.Columns(3).ClearContents 'efface d'éventuelles anciennes données en colonne 3 (=>C)
    DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
    For I = 1 To DL 'boucle sur toutes les lignes I de 1 à DL
        'renvoi dans la cellule ligne I colonne C la valeur de la formule "somme.si"
        O.Cells(I, "C").Value = Application.WorksheetFunction.SumIf(O.Range("A1:A" & DL), O.Cells(I, "A"), O.Range("B1:B" & DL))
    Next I 'prochaine ligne de la boucle
    End Sub
    Merci. après quelques adaptations cela fonctionne comme je le voulais

    Parfait !!

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    bonjour
    pourquoi ne pas insérer un tableau croisé dynamique???
    J'y ai pensé... Mais je n'arrivais pas à faire en sorte que le tableau se mette à jour automatiquement après chaque modification de ma liste. Du coup j'ai pris une autre option, qui n'est peut être pas la meilleure !!

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    Merci à tous pour votre réactivité et pour ces conseils qui m'ont été bien utiles !!

    Ca fonctionne !!

    Bon je pense que je risque d'avoir d'autres questions d'ici la fin de la construction de mon outil.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/01/2016, 20h31
  2. Réponses: 0
    Dernier message: 07/12/2015, 13h12
  3. [XL-2010] Code VBA: somme de cellules avec boucle unique
    Par Thomas4530 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2014, 05h16
  4. Somme de cellules vba
    Par Ozer45 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/02/2012, 13h22
  5. Somme des cellules non vides en VBA
    Par baldg dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/03/2008, 00h44

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