Affiché toutes les valeurs de mon tableau

Fermé
NeoSit Messages postés 5 Date d'inscription lundi 13 février 2017 Statut Membre Dernière intervention 14 février 2017 - Modifié par NeoSit le 14/02/2017 à 10:36
ccm81 Messages postés 10819 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 février 2024 - 14 févr. 2017 à 14:21
Bonjour,
Je travaille sur une macro permettant de compté le nombre d'occurence sur une date.
Le but étant de voir, dans une plage défini le nombre de date identique.

Je vous propose la macro :

Sub Nb_valeur()

Set tableau = Range("A1:A8") 'range pour les jalons

nb = tableau.Rows.Count

Dim t() As String

Dim variable As String


For i = 1 To nb 'Pour chaque ligne sélectionnée

variable = tableau(i) 'On récupère la valeur de la cellule

ReDim Preserve t(i) 'On redimensionne le tableau contenant les valeurs uniques

If Not IsInArray(variable, t) And variable <> "" Then 'Si la valeur n'a pas déjà été trouvée

t(i) = variable 'On conserve la valeur unique

indice = 0

For J = 1 To nb
If tableau(J) = variable Then
indice = indice + 1 'On compte le nb de fois que la valeur a été trouvée dans la sélection
End If
Next

Range("J1:J6") = t(i) & ":" & indice



End If
Next

End Sub


Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean

If stringToBeFound <> "" Then 'Optionnel (à voir)
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End If

End Function


j'ai cependant un petit soucis pour afficher mon tableau ( le résultat)
En effet,
   Range("J1:J6") = t(i) & ":" & indice 


cela ne maffiche que une date(la dernière de la palge) et le nombre de fois qu'elle set présente dans la plage.
Avec :
  MsgBox t(i) & ":" & indice 

Je n'ai plus ce problème, cependant je voudrais avoir un tableau récapitulatif et non une boite de dialogue.

Merci d'avance pour votre aide,

VK

4 réponses

ccm81 Messages postés 10819 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 février 2024 2 403
14 févr. 2017 à 10:32
Bonjour

Essaies ceci si le tableau t a la même dimension que la plage J1:J6
Range("J1:J6") = application.transpose(t)

RQ. As tu pensé à l'objet dictionary qui te permettrait de faire ça plus simplement
0
NeoSit Messages postés 5 Date d'inscription lundi 13 février 2017 Statut Membre Dernière intervention 14 février 2017
14 févr. 2017 à 11:12
Bonjour ccm81,

C'est à peu près çà sauf que je n'ai pas les indices qui apparaisent, et j'ai des blancs lorsque des dates ne sont pas présentes.
je veux juste qu'il maffiche les t(i) et les indices correspondant à coté.
je ne connai pas l'objet dictionary je vais me renseigner.

Merci
0
NeoSit Messages postés 5 Date d'inscription lundi 13 février 2017 Statut Membre Dernière intervention 14 février 2017
14 févr. 2017 à 11:26
Je souhaiterai aussi que les dates soient classées chronologiquement :D

Merci
0
NeoSit Messages postés 5 Date d'inscription lundi 13 février 2017 Statut Membre Dernière intervention 14 février 2017
14 févr. 2017 à 11:31
J'ai réussi à supprimer les blancs et à mettre en ordre chronologique avec le rajout :

    Range("B1:B6") = Application.Transpose((t) & ":" & (indice))

Range("B1:B6").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending
End If
Next

End Sub


Mais il reste un problème pour afficher l'indice (Compil errorr: Type mismatch )
0
ccm81 Messages postés 10819 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 février 2024 2 403
14 févr. 2017 à 11:33
Ben il te faut afficher à côté le tableau des indices

Sinon, avec l'objet dictionary
http://www.cjoint.com/c/GBokGtYikof

Cdlmnt
0
NeoSit Messages postés 5 Date d'inscription lundi 13 février 2017 Statut Membre Dernière intervention 14 février 2017
14 févr. 2017 à 11:43
Comment j'affiche le tableau des indices?
Mince je ne peux pas ouvrir ton document depuis le bureau.. je regarderai ce soir.
merci
0
ccm81 Messages postés 10819 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 février 2024 2 403
14 févr. 2017 à 14:21
Essaies ceci
Range("J1:J6").Cells(i,1) = t(i) & ":" & indice

Pour ce qui est de la solution dictionary, le code
Les valeurs des constantes sont à adapter
Const plagedates = "A2:A30"
Const celd = "C2"

Public Sub ok()
Dim dico As Object, cle As Long, cles, valeurs, nbcles
Dim k As Long, n As Long
n = Range(plagedates).Rows.Count
Set dico = CreateObject("scripting.dictionary")
For k = 1 To n
  cle = Range(plagedates).Cells(k, 1).Value
  If dico.exists(cle) Then
    dico(cle) = dico(cle) + 1
  Else
    dico.Add cle, 1
  End If
Next k
nbcles = dico.Count
' tableau des dates
cles = dico.keys
' tableau des nb occurences
valeurs = dico.items
Range(celd).Resize(nbcles, 1) = Application.Transpose(cles)
Range(celd).Resize(nbcles, 1).NumberFormat = "dd/mm/yyyy"
Range(celd).Offset(0, 1).Resize(nbcles, 1) = Application.Transpose(valeurs)
End Sub

Cdlmnt
0