Tableau VBA

Hello le forum,

J'ai un tableau de donnée sur 5000 lignes.

Parmi ces 5000 lignes je dois tester 2 colonnes.

La première, je dois tester si le contenu est vide ou non.

La seconde je dois tester si un "D" est présent.

Jusque là tout va bien.

Dans la première colonne j'ai des noms tel que "JÉRÔME TOTO"

Ensuite je dois faire un tableau de synthèse à 2 colonnes avec en colone 1 le NOM => JEROME TOTO puis en colonne 2 le NOMBRE => c'est le nombre de fois que j'ai trouvé JEROME TOTO dans mes 5000 lignes.

Mon idée :

=> Une fois les 2 testes effectués j'alimente un tableau VBA (tableau1) avec le nom et ça sur mes 5000 lignes.

=> Puis créer un autre tableau VBA (tableau2) avec uniquement les valeurs uniques du tableau1

=> Pour finir compter pour chaque NOM du tableau2 le nombre de fois où il apparait dans le tableau1

Mais je n'arrive pas à m'en sortir sur cette manipulation ....

J'ai essayé avec plusieurs dictionnaires à la place des tableaux mais je n'y arrive pas non plus ...

Pouvez-vous m'aider svp ? Merci par avance

Voila mon essai :

Public Sub Demmarrages_Semaine()

Const FL_Visu_S As Byte = 5
Const Col_Visu_S As Byte = 1
Const Nom_F_Osc As String = "OSCAR"
Const Nom_Col_Resp_Clo As String = "RESP_CLOSING"

Dim F_Osc As Worksheet

Dim La_Semaine As String

Dim i As Integer
Dim DL_Osc As Integer
Dim z As Integer

Dim y As Byte
Dim j As Byte
Dim Der_Col_Osc As Byte

Dim Col_Osc_S As Byte
Dim Col_Resp_Clo As Byte

Dim Tab_OSCAR()
Dim Dico_Manager_Global
Dim Tab_Resp() As String

Set F_Osc = Sheets(Nom_F_Osc)

With F_Osc.Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
With F_Osc
On Error Resume Next
.ShowAllData
End With
End With

DL_Osc = F_Osc.Range("H6").End(xlDown).Row
Der_Col_Osc = F_Osc.Cells(FL_Visu_S, Columns.Count).End(xlToLeft).Column

ReDim Tab_OSCAR(DL_Osc, Der_Col_Osc)
''On affecte les valeurs de l'onglet "OSCAR" au tableau
For i = 4 To DL_Osc
    For j = 1 To Der_Col_Osc
        Tab_OSCAR(i, j) = F_Osc.Cells(i + 2, j).Value
    Next j
Next i

y = FL_Visu_S + 1
Col_Resp_Clo = F_Osc.Rows(FL_Visu_S).Find(what:=Nom_Col_Resp_Clo, LookAt:=xlWhole).Column
j = 3
i = 3
'Set Dico_Manager_Global = CreateObject("Scripting.Dictionary")
Do
La_Semaine = Cells(y, Col_Visu_S)
Col_Osc_S = F_Osc.Rows(FL_Visu_S).Find(what:=La_Semaine, LookAt:=xlWhole).Column
z = 1
For i = 4 To UBound(Tab_OSCAR)
If Tab_OSCAR(i, Col_Resp_Clo) <> "" And Tab_OSCAR(i, Col_Osc_S) = "D" Then
    Tab_Resp(z) = Tab_OSCAR(i, Col_Resp_Clo).Value
    z = z + 1
    Debug.Print Tab_Resp(z)
'    Dico_Manager_Global.Add z, Tab_OSCAR(i, Col_Resp_Clo)
'    Debug.Print Dico_Manager_Global.Item(Tab_OSCAR(i, Col_Resp_Clo))
End If
y = y + 1
'z = z + 1
Next

'y = y + 1
j = j + 3
Loop Until Cells(y, Col_Visu_S) = ""

MsgBox "terminé"

End Sub

Bqonjour

Un essai à tester. Te convient-il ?

Bye !

7classeur1-v1.xlsm (23.11 Ko)

Hello gmb,

Il manque un petit teste pour que ce soit parfait

Mais dans l'idée c'est ce que je voulais. Merci à toi.

Une petite question, je comprends pas trop la nuance entre la "keys" et les "items" d'un dico ...

Tu saurais m'expliquer stp ?

R@g

je comprends pas trop la nuance entre la "keys" et les "items" d'un dico ...

Quand tu écris :
For i = 1 To 10
    MonDico(Range("A" & i)) = ""
Next i

Tu envoie dans le dictionnaire « MonDico » des noms qui prennent les valeurs des cellules A1 à A10. Et si on retrouve plusieurs fois la même valeur dans cette plage de cellules, le nom correspondant ne sera qu’une seule fois dans le dictionnaire. L’ensemble de ces noms sont les « keys ».

Si maintenant on écrit :

For i = 1 To 10
    MonDico(Range("A" & i)) = i
Next i

A chaque nom qu’on a mis dans le dictionnaire, on a associé une valeur (ici, le numéro de la ligne de la plage). Ces valeurs sont les « items »

OK ?

Bye !

Je vois par contre pourquoi dans ce bout de code on a la clé et l'item ? A quoi ça sert de faire ça en fait ?

'création de la Clé et de sa Valeur
Cle = 68100
Valeur = "Mulhouse"

'vérification si la Clé n'est pas déjà présente dans le Dictionnaire
If Not MonDico.Exists(Cle) Then
    'ajout de la paire Clé + Valeur dans le Dictionnaire
    MonDico.Add Cle, Valeur
End If

pourquoi dans ce bout de code on a la clé et l'item ? A quoi ça sert de faire ça en fait ?

Ça sert à ajouter au dictionnaire "MonDico" une clé (68100) et de lui associer un item ("Mulhouse") sans se servir d'une cellule de feuille de calcul)

OK ?

ça mar merci gmb

Rechercher des sujets similaires à "tableau vba"