XL 2010 Application.CountIf compte pas un nom mais tous les noms compris dans une liste

man.jul

XLDnaute Nouveau
Bonjour

J'ai créé un code mais je souhaiterais que Application.CountIf ne compte pas seulement un nom (ici CA) mais tous les noms compris dans une liste (ex: colonne P et Q).

voici mon code:

je souhaiterais que pour toute les fois à la place de "CA" il y ait une liste de nom (ex:liste dans une colonne)

Dim nABSSOG&, nABSINC2&, nABSINC1&

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nABSSOG As Double
Dim nABSINC2 As Double
Dim nABSINC1 As Double
If Intersect([C9:M29], Target) Is Nothing Then Exit Sub
nABSSOG = Application.CountIf(Intersect([9:11], Target.EntireColumn), "CA")
nABSINC2 = Application.CountIf(Intersect([9:17], Target.EntireColumn), "CA")
nABSINC1 = Application.CountIf(Intersect([9:29], Target.EntireColumn), "CA")
If nABSSOG > 2 Then
MsgBox "Le nombre maximal de SOG absent est atteint !", vbCritical, "Absence"
Target.Interior.Color = RGB(255, 255, 255)
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If

If nABSINC2 > 4 Then
MsgBox "Le nombre maximal d'INC2 absent est atteint !", vbCritical, "Absence"
Target.Interior.Color = RGB(255, 255, 255)
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If

If nABSINC1 > 10 Then
MsgBox "Le nombre maximal d'INC1 est atteint !", vbCritical, "Absence"
Target.Interior.Color = RGB(255, 255, 255)
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If

End Sub

Merci par avance

Manu
 

Pièces jointes

  • test.xls
    575.5 KB · Affichages: 11

Staple1600

XLDnaute Barbatruc
Bonjour le fil, man.jul

•>man.jul
Trés malin de joindre un fichier avec les feuilles protégées par un mot de passe...:rolleyes:
(NB: (Mal)Heureusement cela s'outrepasse facilement)
Si j'ai bien compris la problématique de la chose
VB:
Sub test()
Dim r As Range, c As Range
Set r = [E6:N46]
code = Array("12h", "AA", "AA12h", "AAJ", "AAJ/CAN", "AAN", "AT", "AT12h", "CA", "CAJ", _
    "CAJ/AAN", "CAJ/CEN", "CAJ/CPN", "CAJ/Feu", "CAJ/PCN", "CAJ/STN", "CAJ/V", "CAN", "CE", _
    "CE12h", "CEJ", "CEJ/CAN", "CEJ/CPN", "CEN", "CM", "CM12h", "CP", "CP12h", "CPJ", "CPJ/CAN", _
    "CPN", "Feu/CAN", "MUT", "PCJ/CAN", "RPM", "RPM12h", "SHR", "ST", "ST12h", "STJ", "STJ/CAN", _
    "STJ/Feu", "STJ/PCN", "STJ/V", "STN", "TP", "V/CAN")
For Each c In r
    If Len(c) Then
        If Not IsError(Application.Match(c, code, 0)) Then
        j = j + 1
        End If
    End If
Next
MsgBox j
End Sub
 

man.jul

XLDnaute Nouveau
Je ne comprends pas trop où mettre ce code dans mon code.

pour faire simple je souhaiterais que dans mon code:
nABSSOG = Application.CountIf(Intersect([9:11], Target.EntireColumn), "CA")
qui compte uniquement les cellules contenant "CA"
changer "CA" pour que ce code compte les "CA" + les "ST" + toutes les autres valeurs comprise dans la colonne P.

Pour ne pas avoir à faire un travail laborieux:
nABSSOGca = Application.CountIf(Intersect([9:11], Target.EntireColumn), "CA")
nABSSOGcaj = Application.CountIf(Intersect([9:11], Target.EntireColumn), "CAJ")
nABSSOGst = Application.CountIf(Intersect([9:11], Target.EntireColumn), "ST")
.....
(nABSSOGca + nABSSOGcaj + nABSSOGst + .....) > 2
 

Staple1600

XLDnaute Barbatruc
Re

Avant de mettre le code où que ce soit, pensez à remettre un fichier sans mot de passe...:rolleyes:
Je n'ai pas dit qu'il fallait intégrer mon code dans l'existant

Comme son nom l'indique, ma macro est juste un test.
Donc à exécuter telle quelle, déjà pour savoir si la valeur qui s'affichera dans le MsgBox est la bonne
(Chez moi, lors de mon test, j'obtiens: 41)
 

man.jul

XLDnaute Nouveau
C'est fait le code a été mis mais rien ne se passe, je ne comprends pas le test... je ne comprends pas le résultat que tu obtiens 41.
Voici mon fichier non protégé.
Ce que je souhaite, c'est que ce qui marche pour septembre avec la valeur CA soit de même avec le nombre de valeurs cumulées de la colonne Q
Merci
 

Pièces jointes

  • test.xls
    578 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Re

J'avais testé sur le fichier du premier message.
Donc si la feuille Septembre est active, la précédent macro et celle-ci affiche 41 non?
VB:
Sub test_II()
Dim r As Range, c As Range
Set r = [E6:N46]
For Each c In r
    If Len(c) > 1 Then
        j = j + 1
    End If
Next
MsgBox "Nombre de cellules renseignées: " & j & Chr(13) & "dans la plage: " & r.Address(0, 0), vbInformation, "Feuille traitée: " & r.Parent.Name
End Sub
 

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu