Affiché toutes les valeurs de mon tableau

NeoSit Messages postés 5 Statut Membre -  
ccm81 Messages postés 11033 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. NeoSit Messages postés 5 Statut Membre
       
      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
  2. NeoSit Messages postés 5 Statut Membre
     
    Je souhaiterai aussi que les dates soient classées chronologiquement :D

    Merci
    0
    1. NeoSit Messages postés 5 Statut Membre
       
      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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Ben il te faut afficher à côté le tableau des indices

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

    Cdlmnt
    0
    1. NeoSit Messages postés 5 Statut Membre
       
      Comment j'affiche le tableau des indices?
      Mince je ne peux pas ouvrir ton document depuis le bureau.. je regarderai ce soir.
      merci
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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