Somme avec condition
Résolu
NLAH
Messages postés
135
Statut
Membre
-
NLAH Messages postés 135 Statut Membre -
NLAH Messages postés 135 Statut Membre -
Bonjour,
je voulais chercher une valeur dans la colonne A puis des que je trouve cette valeur je souhaiterai récupérer le numero de la ligne associée pour effectuer une somme par la suite. voila un exemple qui explique ce que je veux exactement:
ColonneA: ColonneB:
A 5
A 5
B 2
B 2
B 2
si l'utilisateur saisi dans lle combobox la valeur A:
je voudrais afficher dans un textbox: la somme : 5+ 5=10
et s'il choisit B la somme est: 2+2+2=8
j'ai commencé par ce code mais j'arrive pas à atteindre mon objectifs, merci pour votre aide:
https://www.cjoint.com/c/GDfqd5IfxqU
je voulais chercher une valeur dans la colonne A puis des que je trouve cette valeur je souhaiterai récupérer le numero de la ligne associée pour effectuer une somme par la suite. voila un exemple qui explique ce que je veux exactement:
ColonneA: ColonneB:
A 5
A 5
B 2
B 2
B 2
si l'utilisateur saisi dans lle combobox la valeur A:
je voudrais afficher dans un textbox: la somme : 5+ 5=10
et s'il choisit B la somme est: 2+2+2=8
j'ai commencé par ce code mais j'arrive pas à atteindre mon objectifs, merci pour votre aide:
https://www.cjoint.com/c/GDfqd5IfxqU
3 réponses
-
Bonsoir NLHA, bonsoir le forum,
Supprime tous les codes de ton UserForm1 (y'en a même un ancien mien ! Mort de rire) et remplace par celui-ci :
Private O As Worksheet 'déclare la variable O (Onglet) Private TV As Variant 'déclare la varaible TV (Tableau des Valeurs) Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm Dim D As Object 'déclare la variable D (Dictionnaire) Dim I As Integer 'déclare la variable I (Incrément) Set O = Worksheets("Feuil2") 'définit l'onglet O TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde) D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 Next I 'prochaine ligne de la boucle Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la listes des éléments du dictionnaire D sans doublon End Sub Private Sub ComboBox1_Change() 'au changement dans la ComboBox1 Dim I As Integer 'déclare la variable I (Incrément) Me.TextBox1.Value = "" 'vide la TextBox1 For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde) 'si la donnée ligne I en colonne 1 de TV est égale à la valeur de la ComboBox1, définit la variable T 'somme d'elle-même avec la donnée ligne I colonne 2 de TV, convertie en entier If TV(I, 1) = Me.ComboBox1.Value Then T = T + CInt(TV(I, 2)) Next I 'prochaine ligne de la boucle Me.TextBox1.Value = T 'renvoie la variable T (la somme) dans la TextBox1 End Sub
-
ça marche pour ce cas, mais en réalité j'ai:
5 colonnes de types différents:
et je voudrais sommer la colonne E mais lorsque j'effectue quelques sur votre code, il se bloque problème d'incompatibilie de type
https://www.cjoint.com/c/GDfu4BSwbaL
Merci. -
-
-
-
-
-
Re,
Normalement oui ça fonctionne. Au pire si ça plante essaie avec :Set O = Worksheets(CByte(ComboBox1.Value))
Car l'index est un entier et pas du texte...
Mais je ne comprends pas pourquoi tu ne testes pas avant de poser la question ?!...
-
j'ai essayé ce que tu m'as dit mais ça marche pas ni avec Cbyte ni sans cbyte
j'ai testé avant de poser la question ;)
voila le lien:
https://www.cjoint.com/c/GDhkVID0OLm
merci
-
-
Re,
En fait ça ne marche pas à l'initialisation de L'UserForm mais il fallait le placer dans la procédure Change de la ComboBox2. Même combat, supprime et remplace tout :
Private O As Worksheet 'déclare la variable O (Onglet) Private TV As Variant 'déclare la varaible TV (Tableau des Valeurs) Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm Dim k As Integer For k = 1 To Sheets.Count ComboBox2.AddItem (k) Next k End Sub Private Sub ComboBox2_Change() Dim D As Object 'déclare la variable D (Dictionnaire) Dim I As Integer 'déclare la variable I (Incrément) Me.ComboBox1.Clear 'vide la ComboBox1 Me.TextBox1.Value = "" 'efface la TextBox1 Set O = Worksheets(CByte(ComboBox2.Value)) 'définit l'onglet O TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde) D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 Next I 'prochaine ligne de la boucle Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la listes des éléments du dictionnaire D sans doublon End Sub Private Sub ComboBox1_Change() 'au changement dans la ComboBox1 Dim I As Integer 'déclare la variable I (Incrément) Me.TextBox1.Value = "" 'vide la TextBox1 For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde) 'si la donnée ligne I en colonne 1 de TV est égale à la valeur de la ComboBox1, définit la variable T 'somme d'elle-même avec la donnée ligne I colonne 2 de TV, convertie en entier If TV(I, 1) = Me.ComboBox1.Value Then T = T + CInt(TV(I, 6)) Next I 'prochaine ligne de la boucle Me.TextBox1.Value = T 'renvoie la variable T (la somme) dans la TextBox1 End Sub