Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/09/2011, 15h21   #1
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 2
Points : 2
Par défaut Somme de cellules si une colonne contient la même information

Bonjour,

Je souhaite trouver une solution VBA pour résoudre mon problème : Additionner des données chiffrés si la première colonne contient la même information. C'est pas très clair je sais alors ... petit exemple :

Colonne A Colonne B Colonne C
JOJO 4 7
DAMIEN 2 1
LUC 6 4
JOJO 3 2
ROUDOUDOU 1 7

Je souhaite que lorsque la colonne A contienne le nom "JOJO", les données de la colonne B et de la colonne C s'additionnent soit : 4 + 7 + 3 + 2. Tout ça en valeur absolu.

Le must serait que les donnés puissent ressortir sur une autre feuille Excel avec une seule ligne JOJO et une seule colonne avec les chiffrés additionnés, ici : 16.

J'ai cherché sur le net et sur ce forum, mais je n'ai pas trouvé, et évidemment je suis novice en VBA. J'ai déjà bien galérer aujourd'hui, là ça me dépasse complètement.

Merci d'avance pour ceux qui m'aideront.
Eccle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h29   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 897
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 897
Points : 7 182
Points : 7 182
Bonjour,

Une solution en utilisant la formule Somme.Si en VBA

Ici on retourne dans un msgbox la somme des colonnes B et C si dans A on trouve TOTO
Code :
1
2
MsgBox Application.WorksheetFunction.SumIf(Range("A:A"), "TOTO", Range("B:B")) _
    + Application.WorksheetFunction.SumIf(Range("A:A"), "TOTO", Range("C:C"))
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h38   #3
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 2
Points : 2
Yeah merci ! Mais comment faire pour que le résultat s'affiche sur une nouvelle feuille et non une MsgBox ?
Eccle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h41   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 897
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 897
Points : 7 182
Points : 7 182
Comme cela

Code :
1
2
3
4
5
6
7
8
9
10
 
sub CalculSomme()
Dim strNom as String
 
strNom = "TOTO"
 
Sheets("Feuil3").Range("A1").value = strNom
Sheets("Feuil3").Range("B1").value = Application.WorksheetFunction.SumIf(Range("A:A"), strNom, Range("B:B")) _
    + Application.WorksheetFunction.SumIf(Range("A:A"), strNom, Range("C:C"))
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h43   #5
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 2
Points : 2
Grand merci.

Bonjour,

J'ai essayé de remettre la formule à ma convenance sans venir vous dérangez, mais malheureusement je n'y arrive pas

Est-il possible d'utiliser cette formule VBA pour toutes les cellules en ("A:A") ? Pas juste pour "TOTO" mai pour tous : "TOTO", "JOJO", "DAMIEN" etc

Et donc que cela ressorte en :

"TOTO" --> Total
"JOJO" --> Total
Eccle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 10h40   #6
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 954
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 954
Points : 1 166
Points : 1 166
une petite boucle For devrait suffir

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub CalculSomme()
 
    ' Déclaration des variables
    Dim strNom(2) As String
    Dim i As Integer
 
    ' Ajout de tous les noms
    strNom(0) = "TOTO"
    strNom(1) = "JOJO"
    strNom(2) = "DAMIEN"
    'etc.
 
    'Calcul de la somme pour chaque client
    For i = 0 To 2
        ' par contre ici ça ne marche pas, tu remplie toujours les cases A1 et B1 de la feuille 3
        Sheets("Feuil3").Range("A1").Value = strNom(i)
        Sheets("Feuil3").Range("B1").Value = Application.WorksheetFunction.SumIf(Range("A:A"), strNom(i), Range("B:B")) _
                                           + Application.WorksheetFunction.SumIf(Range("A:A"), strNom(i), Range("C:C"))
    Next
 
End Sub
essaye de corriger l'erreur que je t'ai laissé
Code :
1
2
'idée mais pas sur, a toi de tester
Sheets("Feuil3").Range("A" & i)
Bonne continuation
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 10h44   #7
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 897
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 897
Points : 7 182
Points : 7 182
j'ai adapté mon précédent code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub CalculSomme()
Dim strNom As String
Dim iSource As Long
Dim iDest As Long
Dim Rg As Range
Dim shDest As Worksheet
 
Set shDest = Sheets("Feuil3")
iDest = 1
 
For iSource = 1 To Range("A65356").End(xlUp).Row
    strNom = Range("A" & iSource).Value
 
    'recherche si nom deja dans la liste destinataire
    Set Rg = shDest.Range("A:A").Find(strNom)
 
    If Rg Is Nothing Then
        shDest.Range("A" & iDest).Value = strNom
        shDest.Range("B" & iDest).Value = Application.WorksheetFunction.SumIf(Range("A:A"), strNom, Range("B:B")) _
            + Application.WorksheetFunction.SumIf(Range("A:A"), strNom, Range("C:C"))
 
        iDest = iDest + 1
    End If
 
Next iSource
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 11h02   #8
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 2
Points : 2
Je suis débutant, et quand je dis débutant j'entend par là que j'ai débuté avant hier

Donc évidemment l'erreur je la vois pas, même si j'essaye d'être logique et de bien réfléchir !


Une fois que j'aurai fini cette macro, je commencerai par voir les bases de VBA que je n'ai pas !

Merci pour votre aide en tous cas.
Eccle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 11h07   #9
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 954
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 954
Points : 1 166
Points : 1 166
lol pas de soucis, ne te fie pas aux étoile, je débute en VBA

l'erreur était que tu allait ércire toujours sur la même ligne...
Code :
' par contre ici ça ne marche pas, tu remplie toujours les cases A1 et B1 de la feuille 3
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 11h19   #10
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 2
Points : 2
OH MY GOD ! Jérome your solution is so PERFECT !

Merci beaucoup c'est génial !

@Hunteshiva : Oui l'erreur je l'avais repéré, c'est de la corriger qui posait problème XD
Eccle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 11h31   #11
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 954
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 954
Points : 1 166
Points : 1 166
Jérome t'a donné la solution,
dans la boucle For à chaque "i" tu incrémente la case A, afin de remplir A1 puis A2, puis A3, ...

Code :
shDest.Range("A" & iDest).Value = strNom
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h00.


 
 
 
 
Partenaires

Hébergement Web