Numéro de la première ligne dans laquelle il y a un nombre

Résolu
kerjc Messages postés 5 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 mai 2008 - 16 mai 2008 à 16:38
kerjc Messages postés 5 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 mai 2008 - 20 mai 2008 à 12:39
bonjour à tous,

je commence à développer sous VBA excel et je ne réussis pas à trouver le numéro de la première ligne dans laquelle il y a un nombre.
si je ne suis pas clair :
pour chaque colonne, les première lignes comportent des titres, des explications sur les valeurs de la colonne...
et à partir d'une certaine ligne (qui n'est pas toujours la même pour toutes les colonnes), j'ai des nombres uniquement.
Je voudrais savoir comment créer une petite fonction dans laquelle je donne en argument le numéro de colonne, et qui me donne comme résultat : le numéro de la première ligne contenant un nombre.

merci de bien vouloir de guider (je commence la programmation et j'ai un peu de mal)

kerjc

9 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
16 mai 2008 à 16:59
salut,

boucle sur tes lignes avec la fonction IsNumeric

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
20 mai 2008 à 10:37
Heeeee oups c'est ma faute
Il faut retirer les parenthèses et sa devrais être bon
En fait VB6 à une façon un peut zarb de géré les appels de fonction. Si des parenthèses sont présente une valeur de retour est envoillé si elle sont absente alors non. Voila tout (j'ai testé ce coup si et c'est bon )

Amicalement
Pensez "Réponse acceptée"
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
16 mai 2008 à 17:00
Bonjour
Pour moi le plus simple est que tu fasse une fonction contenant une boucle testant une à une les données des ligne de cette colonne. A fin de savoir si la valeur est numérique il existe la fonction "IsNumeric" qui retourne vrais si la chaine passé à cette fonction est une valeur numérique faux si non.

Voila dit moi si sa te suffis

Amicalement
Pensez "Réponse acceptée"
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
16 mai 2008 à 17:01
Ha un poile en retard ^^

Amicalement
Pensez "Réponse acceptée"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kerjc Messages postés 5 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 mai 2008
16 mai 2008 à 17:05
c'est exactement ce que je cherchais. J'aurais pu chercher encore longtemps sans vos aides.

Merci à vous deux.

kerjc
0
kerjc Messages postés 5 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 mai 2008
16 mai 2008 à 18:20
si je peux faire gagner du temps à quelques uns, voici le code :

Public Function PremiereLigneNumerique(Colonne) As Integer


Dim Ligne As Integer


Ligne = 1


    While IsEmpty(Cells(Ligne, Colonne))
        Ligne = Ligne + 1
    Wend
    While (IsNumeric(Cells(Ligne, Colonne)) = False)
        Ligne = Ligne + 1
        While IsEmpty(Cells(Ligne, Colonne))
            Ligne = Ligne + 1
        Wend
    Wend


PremiereLigneNumerique = Ligne


End Function
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
19 mai 2008 à 12:27
Juste une petite remarque sur ta fonction :
Tu ne test pas le numéro de ligne, ce qui veut dire que si par malheur aucune de tes lignes n'es numérique dans cette colonne tu vas rencontré une erreur.
Place simplement une gestion d'erreur :
'8<--------------------------------------------------------------------------
Public Function PremiereLigneNumerique(Colonne) As Integer
On Error goto ErreurPremiereLigneNumerique
Dim Ligne As Integer
Ligne = 1
    While IsEmpty(Cells(Ligne, Colonne))
        Ligne = Ligne + 1
    Wend
    While (IsNumeric(Cells(Ligne, Colonne)) = False)
        Ligne = Ligne + 1
        While IsEmpty(Cells(Ligne, Colonne))
            Ligne = Ligne + 1
        Wend
    Wend
PremiereLigneNumerique = Ligne
Exit Function '<- Quitte la fonction (n'arrive ici que dans le cas où aucune erreur n'est rencontré

ErreurPremiereLigneNumerique: 'Arrive ici en cas d'erreur
    Err.clear() 'Supprime l'erreur (vue qu'elle est géré)
    PremiereLigneNumerique = 0 'Ainsi si cette fonction te retourne 0 (ce qui est théoriquement impossible) c'est que ta colonne ne contient pas de données numérique
End Function
'-------------------------------------------------------------------------->8

Perso j'aurais plutôt vue une fonction comme sa :
'8<--------------------------------------------------------------------------

Public Function PremiereLigneNumerique(Colonne) As Integer

On Error goto ErreurPremiereLigneNumerique

Dim Ligne As Integer

Ligne = 1
    While (IsNumeric(Cells(Ligne, Colonne).Text) = False) 'Le ".Text" te permet de récup une chaine vide si la cellule est vide et non la valeur "Empty" (qui est numérique)

        Ligne = Ligne + 1
    Wend

PremiereLigneNumerique = Ligne

Exit Function '<- Quitte la fonction (n'arrive ici que dans le cas où aucune erreur n'est rencontré


ErreurPremiereLigneNumerique: 'Arrive ici en cas d'erreur

    Err.clear() 'Supprime l'erreur (vue qu'elle est géré)

    PremiereLigneNumerique = 0 'Ainsi si cette fonction te retourne 0
(ce qui est théoriquement impossible) c'est que ta colonne ne contient
pas de données numérique

End Function

'-------------------------------------------------------------------------->8

Voila bonne prog

Amicalement
Pensez "Réponse acceptée"
0
kerjc Messages postés 5 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 mai 2008
20 mai 2008 à 09:59
salut,

tout d'abord, merci d'avoir pris le temps de regarder mon code. Je suis toujours avide de conseils car je débute vraiment. La preuve : je ne sait pas gérer les erreurs...
Du coup, j'ai copié-collé ton code à la place du mien, mais j'ai un problème lors de la compilation : le message dit qu'il y a un problème de syntaxe.
La ligne qui pose problème est Err.clear() à priori.
Je ne sais pas si cela peut avoir un rapport, j'ai vb6, est-ce qu'on a des versions compatibles?

merci
0
kerjc Messages postés 5 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 mai 2008
20 mai 2008 à 12:39
en effet, cette fois c'est la bonne!
cool

merci pour tout
0
Rejoignez-nous