Macro qui se lance après validation liste déroulante

MEZ

XLDnaute Junior
Bonjour à tous,
J'essaye de faire une macro qui me permet de faire une vérification de cohérence suite à ce que j'ai validé dans une liste déroulante.
J'ai mis un fichier en copie, je pense qui résume de manière simple le pb.
J'ai essayé plusieurs méthodes mais j'ai du mal déjà à fixer la macro à une seule colonne.

Si vous avez des idées ou piste de réflexions je suis preneur.

Merci beaucoup et Bon weekend
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonsoir MEZ,

Clic droit sur l'onglet, Visualiser le code et coller cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1 And Target.Column = 5 And Target.Count = 1 And Target(1) <> "" Then _
    MsgBox "Nombre de '" & Target & "' = " & Application.CountIf([E:E], Target) _
        & vbLf & "Somme quantité1 = " & Application.SumIf([E:E], Target, [B:B])
End Sub
A+
 

MEZ

XLDnaute Junior
Merci Job75 pour ce retour précis!
J'essaye maintenant de rajouter une difficulté: Je cherches à prendre en compte dans le comptage que les lignes pour lesquelles la première cellule de la colonne est identique à la dernière ligne en-cours de saisie. Dans le fichier que je mets en copie, il s'agit donc de prendre en compte que les lignes qui ont en colonne 1 la valeur 4

Quelle serait la meilleure boucle à utiliser à ton avis? ou si pas de boucle quelle autre méthode?

Merci!
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonjour MEZ, le forum,

D'après ce que je comprends il faut utiliser NB.SI.ENS (CountIfs) et SOMME.SI.ENS (SumIfs) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filtre1 As Range, filtre2 As Range
Set filtre1 = [E2]: Set filtre2 = [A2] 'modifiable
If Target.Row > 1 And Target.Column = filtre1.Column And Target.Count = 1 And Target(1) <> "" _
    And Target(1) = filtre1 And Cells(Target.Row, filtre2.Column) = filtre2 Then _
        MsgBox "Nombre de '" & filtre1 & "' + '" & filtre2 & "' = " & _
            Application.CountIfs(filtre1.EntireColumn, filtre1, filtre2.EntireColumn, filtre2) & vbLf & _
                "Somme quantité1 = " & Application.SumIfs([B:B], filtre1.EntireColumn, filtre1, filtre2.EntireColumn, filtre2)
End Sub
Bonne journée.
 

Fichiers joints

Dernière édition:

MEZ

XLDnaute Junior
Bonsoir,
La macro fonctionne très bien mais elle se lance des fois quand je tire d'autres colonnes ( colonne liste déroulante..mais aucun rapport avec celle qui est sujet de ce topic

J'ai ces messages:

10268401026841

Quelle solution possible pour éviter ce genre de situation du coup?

Merci et bonne soirée!
 

job75

XLDnaute Barbatruc
La macro que vous utilisez n'est pas la bonne, j'ai modifié la 5ème ligne avec Target(1) = filtre1.
 

MEZ

XLDnaute Junior
Bonjour Job75,
Même avec cette correction, la macro se lance pour d'autres colonnes:

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim filtre1 As Range, filtre2 As Range
Set filtre1 = [S2]: Set filtre2 = [A2] 'modifiable si les colonnes concernées changent

     If Target.Row > 1 And Target.Column = filtre1.Column And Target.Count = 1 And Target(1) <> "" _
     And Target(1) = filtre1 And Cells(Target.Row, filtre2.Column) = filtre2 Then _
 
           MsgBox "Nombre de '" & filtre1 & "' pour le contrat ID '" & filtre2 & "' = " & _
           Application.CountIfs(filtre1.EntireColumn, filtre1, filtre2.EntireColumn, filtre2) & vbLf & _
           "Le Cumul cliqué de " & filtre1 & " est de " & Application.SumIfs([R:R], filtre1.EntireColumn, filtre1, filtre2.EntireColumn, filtre2) * 100 & "%"

    End If

End Sub
Je remets mon code.. Je ne vois pas où ça coince?

Merci!
 

job75

XLDnaute Barbatruc
La macro se déclenche quelle que soit la cellule modifiée mais la MsgBox s'affiche unique ment si la cellule se trouve en colonne S..
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas