Valeurs uniques et multiconditonnelles
Bonjour à tous,
Je ne parviens pas à concevoir mon petit algorithme et ce, malgré avoir acheté un ouvrage sur le VBA.
C'est donc par désespoir de ne pas y arriver et espoir que quelqu'un me vienne en soutien que j'ouvre un nouveau sujet.
Vous trouverez un exemple de donnée et de ce que je souhaite dans le fichier ci-joint. Néanmoins, je vous donne quelques explications :
Dans mon activité, un certain nombre de rapports sont saisis par des agents chaque mois.
J'aimerai connaitre le nombre d'agents uniques qui ont saisi des rapports sur une période (mois & année) et par équipe.
Je saisie manuellement le code équipe dans une cellule, le chiffre du mois, et l'année.
En bref, je souhaite donc connaitre le nombre d'agents unique grâce à un ID agent unique sous trois conditions.
J'avais essayé avec un dictionnaire sans succès, et avec les tableaux je n'y parviens pas non plus.
Je pense au deux problèmes :
- un avec l'initialisation des données quand on récupère des valeurs d'un fichier excel?
- un second dans l'utilisation du dictionnaire?
Dim pEquipe As Range
Dim pDate As Range
Dim pAgent As Range
Dim cMois As Range
Dim cAnnee As Range
Dim cEquipe As Range
Dim i As Long
Dim j As Long
Dim nbR As Long
Dim t() As Variant
Dim temp As Variant
Set pAgent = Range("D2:E1275")
Set pDate = Range("F2:F1275")
Set pEquipe = Range("E2:E1275")
Set cMois = Range("C4")
Set cAnnee = Range("C3")
Set cEquipe = Range("C5")
Set MonDico = CreateObject("Scripting.Dictionary")
nbR = pEquipe.Count
'programme
For i = 1 To nbR
If pEquipe <> "" And Month(pDate.Cells(i, 1).Value) = cMois And Year(pDate.Cells(i, 1).Value) = cAnnee And pEquipe.Cells(i, 1).Value = cEquipe Then
temp = pAgent(i, 1)
MonDico(temp) = temp
End If
Next i
nbagentU_mois_equipe = MonDico.Count
End FunctionMerci par avance à ceux qui prendront de leur temps pour m'aider.
Cordialement,
Ozy
Bonjour
A tester
Function test() As Integer
Dim cMois As Integer
Dim cAnnee As Integer
Dim cEquipe As String
Dim j As Long
Dim Ws As Worksheet
Dim Mondico As Object
Application.Volatile
Set Ws = Sheets("DATA")
cMois = Range("C4")
cAnnee = Range("C3")
cEquipe = Range("C5")
Set Mondico = CreateObject("Scripting.Dictionary")
For j = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
If cMois = Month(Ws.Range("F" & j)) And cAnnee = Year(Ws.Range("F" & j)) And cEquipe = Ws.Range("E" & j) Then
Mondico(Ws.Range("D" & j).Value) = ""
End If
Next j
test = Mondico.Count
End FunctionMerci Banzai64 ! Ça fonctionne. Merci Merci.
Avec ce que tu m'as fourni j'ai compris comment fonctionnait l'initialisation et déclaration de valeurs qui proviennent d'un tableau excel.
Néanmoins, j'aimerais être sur de comprendre : Mondico(Ws.Range("D" & j).Value) = ""
Intrinsèquement, un dictionnaire de données s'occupe de garder que des valeurs uniques, right? Mais à quoi sert le = "" ??
Merci encore.
Bonjour
A rien .... c'est pour faire avancer le shiiiii, le shilliiiiiiii, le schimiliblink ( blague de vieux)
C'est juste pour occuper la place, on peut marquer "toto","Supercalifragilisticexpialidocious" c'est pareil