Bjour Megafan,
merci d'avoir pris du temps pour me répondre.
Je viens de lire le code que tu m'as envoyé.
En fait, tu ajoutes un argument à ma fonction qui est la plage cible, évitant au passage de t'emmerder avec la problématique des cell vides qui est une limite de la méthode End(xldown).
Je suis un peu embêté par ta solution car elle oblige l'utilisateur à sélectionner la plage alors que pour ma part je destine cette fonction à un document qui fera appel de façon autonome aux données. En gros, je ne souhaite pas que l'utilisateur final consulte le document source qui contient des infos que je ne veux pas lui faire partager.
En revanche, je suis preneur de toute explication si tu en as à propos de l'impossibilité de faire fonctionner cette fonction depuis n'importe quelle feuille de mon document.
En effet, le résultat voulu s'affiche correctement si je fais appel à la fonction depuis la feuille contenant les données, mais pas si je suis dans une autre feuille.
Merci pour ton aide.
BSide
-------------------------------
Réponse au message :
-------------------------------
> Salut,
>
> Dans ton classeur, tu rajoute un module
> Dans le module tu copie le code suivant
>
> Function NbDA(Plage As Range) As Integer
>
> Dim Cmd() As String
> Dim ValTest As String
> Dim i As Integer
> Dim Cell As Range
>
> ReDim Cmd(0)
>
> For Each Cell In Plage
> ValTest = Cell.Value
> If ValTest <> "" Then 'on tient pas compte des cellules vides
> For i = 1 To UBound(Cmd)
> If Cmd(i) = ValTest Then Exit For
> Next
>
> If i > UBound(Cmd) Then
> ReDim Preserve Cmd(UBound(Cmd) + 1)
> Cmd(UBound(Cmd)) = ValTest
> End If
>
> End If
> Next
>
> NbDA = UBound(Cmd)
> End Function
>
>
> tu peux appeler ta fonction Nbda depuis n'importe quelle feuille, et tu peut meme maintenant préciser la plage de cellule à 'compter'
>
> @+
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Bonjour,
> >
> > j'ai écrit une petite fonction dont la finalité est de décompter le nombre d'occurences différentes dans une colonne EXCEL.
> >
> > Mode opératoire : on récupère la valeur contenue dans une cellule et on la stocke dans une variable temporaire.
> > Cette variable est comparée à un tableau contenant l'ensemble des valeurs de la colonne. Si cette valeur existe déjà, on passe à la cellule du dessous. Si la valeur n'est pas dans le tableau, on l'y ajoute.
> > Par exemple :
> > colonne A
> > voiture
> > voiture
> > camion
> > voiture
> > vélo
> > moto
> > vélo
> > --> résultat de la fonction = 4 (voiture, camion, vélo, moto)
> >
> > Mon problème : la fonction doit trouver les valeurs dans une feuille spécifique nommée "En cours". Comme c'est une fonction, je devrais pouvoir l'appeler de n'importe quelle autre feuille, comme toute fonction. Or, si j'utilise ma fonction dans une autre feuille que "En cours", le résultat est systématiquement 0.
> >
> > Voici le code :
> >
> >
> > Function NbDA() > > > > Dim Cmd() As String > > Dim ValTest As String > > Dim Compteur As Integer > > Dim Debut As Integer > > Dim Test As Boolean > > Dim myCell As Range > > > > Debut = 3 > > > > Set myCell = Worksheets("En cours").Range("o" & Debut) > > myCell.Activate > > Fin = myCell.End(xlDown).Row > > Compteur = 0 > > ReDim Preserve Cmd(Compteur) > > Cmd(Compteur) = Range("aa" & Debut).Value > > > > For cpt = Debut + 1 To Fin > > > > Test = False > > ValTest = Range("aa" & cpt).Value > > For cpt2 = 0 To UBound(Cmd) > > If Cmd(cpt2) = ValTest Then > > Test = True > > Exit For > > End If > > Next cpt2 > > > > If Test = False Then > > Compteur = Compteur + 1 > > ReDim Preserve Cmd(Compteur) > > Cmd(Compteur) = ValTest > > End If > > > > Next cpt > > > > NbDA = Compteur > > > > End Function > > |
> >
> > Merci pour votre aide.
> >
> >
BSide> >

>