Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Fonction EXCEL [ Archives Visual Basic / VBA ] (BSide)

mardi 3 juin 2003 à 17:40:16 | Fonction EXCEL

BSide

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

mardi 3 juin 2003 à 18:48:05 | Re : Fonction EXCEL

Megafan

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
>

mercredi 4 juin 2003 à 13:14:40 | Re : Fonction EXCEL

BSide

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
> >
>

samedi 12 juin 2004 à 11:59:36 | Re : Fonction EXCEL


Cette discussion est classé dans : fonction, compteur, cmd, debut, voiture


Répondre à ce message

Sujets en rapport avec ce message

Fonction verifie nom [ par kat40 ] Bonjour, Dans mon application VB utilise une base de données Acess. Lorsque je rentre des données, je dois vérifier si le numéro du chèque est déjà ut détection debut de ligne [ par Tophe_garage ] J'ai un tableau que je filtre (avec filtre automatique) suivant 2 critères ( col K=1 et col M=2000. Le soucis, c'est que la première ligne réponant a Comment decrementer ? [ par beausicilien ] Bonjour, Je cherche la fonction inverse de For i = debut to finnext i une fonction qui decremente. Je ne sais pas si il y en a une en vb ? j'aurais op compteur et fonction split [ par king_kunu ] salutj'utilise la fonction split pour decomposer ma chaine de caratere dans un tableauj'aimerais savoir si il est possible de connaitre la taille du t accelerer un son wav [ par titgarsvert ] Bonjour, Le theme n'existe pas mais je préfère préciser que je travail en .NET 2008Voila, je souhaite recréer un son de moteur de voiture (je fais un [ActiveX] exécution de javascript [ par spiloack ] Bonjour à tous !   Je développe une activeX en VB6, et j'aurais aimé savoir s'il était possible d'exécuter une fonction javascript décrite dans la comparaison de chiffre binaire et agir en fonction [ par Jacky7 ] Bonsoir à tous,J'ai realisé un prog qui permet de lire et de convertir la valeur du port de décimale en binaire (bit de donnés de DO à D7) toutes les opendir recursif [ par PaTaTe ] J'aimerais créer une fonction qui me liste toute une arborescence donc la logique voudrait que je rappelle ma fonction si un répertoire est trouvé seu Quel fonction utiliser? [ par barnabas24 ] je m'explique par cet exemple : je veux avoir toutes les données ayant trait à la réparationj'ecris " Reparation" dans un textboxet je veux afficher t vb.net et javascript [ par JU78 ] Bonjour a tous, je viens d'arriver sur code source et pour bien commencer j'amène une petite questionvoila je fais une application sous visual studio


Nos sponsors

Sondage...

CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.