Changer une valeur en fonction de 2 criteres

F

francis

Guest
Bonsoir a tous,

Je souhaite creer une macro avec un bouton pour l'executer, et j'ai besoin de vos connaissances pour la rediger.
J'ai tel qu'on peut le voir dans le fichier adjoint, une reference dans la colonne A, une autre dans la colonne B et une valeur dans la colonne C.
je souhaite obtenir le resultat suivant:
Ex: Si dans la colonne A la reference est= a F ,et dans la colonne B la reference est = a 1, alors la valeur de la colonne C doit etre multipliée par 2.
Dans le fichier adjoint le resultat en C1 devra etre 24.
Je supose quee je n'aurai ensuite qu'a changer les references et le coef multiplicateur dans la formule pour traiter tous les cas possibles.
merci d'avance pour votre aide
A+
 

Pièces jointes

  • Libro2.zip
    1.4 KB · Affichages: 13
  • Libro2.zip
    1.4 KB · Affichages: 14
  • Libro2.zip
    1.4 KB · Affichages: 15
F

francis

Guest
Merci Herve,
C'est precisement ce que je souhaitais.Si je peux me permettre de de mettre un peu plus a contribution, serait il possible de mettre par exemple dans la colonne L (peu importe la colonne), en L1 le total des valeurs correspondant au criteres F 1, en L2 celui des valeurs F 2, en L3 celui des valeurs A1 et etc.....
Merci encore pour ton aide
A+
Francis
 
H

Hervé

Guest
Bonjour

voir en pièce jointe.

Public Sub vev()
Dim source As New Collection
Dim item
Dim l As Integer, i As Integer
Dim c As Range, cell As Range

Range("e1:f1000").ClearContents

l = Range("a65000").End(xlUp).Row
On Error Resume Next
For Each c In Range("a1:a" & l)
source.Add c.Value & c.Offset(0, 1).Value, c.Value
Next c

i = 1
For Each item In source
For Each cell In Range("a1:a" & l)
If item = cell.Value & cell.Offset(0, 1).Value Then
somme = somme + (cell.Offset(0, 2).Value * 2)
End If
Next cell
Range("e" & i).Value = "Total des " & item & " ="
Range("f" & i).Value = somme
i = i + 1
somme = 0
Next item
End Sub

le principe : on crée une collection des items et on compare chaque cellule avec les items.

On pourrait faire plus court si tes colonnes A et B étaient concaténer.

Salut
Hervé
 

Pièces jointes

  • Libro2.zip
    8.6 KB · Affichages: 18
  • Libro2.zip
    8.6 KB · Affichages: 14
  • Libro2.zip
    8.6 KB · Affichages: 17
H

Hervé

Guest
re

Je viens de m'apercevoir que le code ne fonctionnait pas si un numérique était saisie en colonne A.

remplace : source.Add c.Value & c.Offset(0, 1).Value, c.Value

par : source.Add c.Text & c.Offset(0, 1).Text, c.Text

salut
Hervé
 
F

francis

Guest
Mille fois merci Hervé.
Je dois reconaitre que là je suis emerveillé. je peux ecrire n'importe quelle paire de criteres et ta macro me les referencie et en fais la somme. Chapeau.
Promis, je vais essayer de comprendre, mais meme si je ni arrive pas, encore merci pour tout.
Bonne soirée a tous
Francis
 
F

francis

Guest
Re Bonsoir Herve,
Milles excuses mais je me suis cru plus malin que ce que je ne suis. Pour simplifier la presentation j'ai mis les donnees dans les colonnes A,B,C mais en realité dans mes documents les valeurs de la colonne A sont dans la colonne B, celles de la B dans la F et celles de la C dans la H. J'ai reussi a deplacer l'affichage des resultats dans les colonnes Let M, mais une fois mes donnees positionneés en B,F et H je n'arrive pas a faire les modifications pour que la macro fonctionne. Je sais, je suis un mauvais exemple et j'espere que beaucoups liront ce messasge et ne feront pas la meme erreur que moi.
Merci d'avance pour ton aide
Encore pardon
Francis
 
H

Hervé

Guest
Bonsoir

C'est pas grave

Public Sub vev()
Dim source As New Collection
Dim item
Dim l As Integer, i As Integer
Dim c As Range, cell As Range

Range("l1:m1000").ClearContents

l = Range("b65000").End(xlUp).Row
On Error Resume Next
For Each c In Range("b1:b" & l)
source.Add c.Text & c.Offset(0, 4).Text, c.Text
Next c

i = 1
For Each item In source
For Each cell In Range("b1:b" & l)
If item = cell.Value & cell.Offset(0, 4).Value Then
somme = somme + (cell.Offset(0, 6).Value * 2)
End If
Next cell
Range("l" & i).Value = "Total des " & item & " ="
Range("m" & i).Value = somme
i = i + 1
somme = 0
Next item
End Sub

Salut
Hervé
 
F

francis

Guest
C'est encore moi Herve,
J ai appliqué les macros a mon document ( fichier joint) et il subsiste un petit probleme. Dans la colonne F la macro ne reconait qu'un critere ( Horario Normal) qu'elle m'affiche en colonne L, mais pas l'autre critere (Horario Super Reducido). J'ai modifié le nom du critere, pensant que la repetition du mot horario pouvait gener, mais cela ne change rien. Je m'en remet a ton savoir
Merci beaucoup
Francis
 

Pièces jointes

  • Nouveau.zip
    23.3 KB · Affichages: 13
  • Nouveau.zip
    23.3 KB · Affichages: 13
  • Nouveau.zip
    23.3 KB · Affichages: 13
H

Hervé

Guest
re

Apparement le problème venait du fait que lors de la constitution de la collection le n° de key était attribué que sur la premiere valeur.

Ceci créant de "faux" doublons

remplace : source.Add c.Text & c.Offset(0, 4).Text, c.Text
par source.Add c.Text & c.Offset(0, 4).Text, c.Text & c.Offset(0, 4).Text

et dis moi si ca marche

Salut
Hervé
 
F

francis

Guest
Salut Herve,

Encore un petit detail si tu me permets.

Dans un autre livre nomé "Infos" Feuille 3, j'ai dans la colonne A toutes les references de la colonne L pouvant exister. Est il possible de renvoyer dans la colonne B du livre "Infos" la somme obtenue pour chaque reference?
Merci encore pour ton aide
Francis
 

Discussions similaires

Statistiques des forums

Discussions
312 249
Messages
2 086 598
Membres
103 253
dernier inscrit
alscanv974