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
 

Pièces jointes

  • liste deroulante macro.xlsx
    10.1 KB · Affichages: 14

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!
 

Pièces jointes

  • liste deroulante macro (2).xlsx
    10.2 KB · Affichages: 6

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.
 

Pièces jointes

  • liste deroulante macro (2).xlsm
    22 KB · Affichages: 13
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:

1026840
1026841


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

Merci et bonne soirée!
 

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!
 

Discussions similaires

Réponses
8
Affichages
363

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 821
dernier inscrit
hybroxis