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

[Résolu]
Signaler
Messages postés
5
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
20 mai 2008
-
Messages postés
5
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
20 mai 2008
-
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

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

boucle sur tes lignes avec la fonction IsNumeric

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

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"
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

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"
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

Ha un poile en retard ^^

Amicalement
Pensez "Réponse acceptée"
Messages postés
5
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
20 mai 2008

c'est exactement ce que je cherchais. J'aurais pu chercher encore longtemps sans vos aides.

Merci à vous deux.

kerjc
Messages postés
5
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
20 mai 2008

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
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

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"
Messages postés
5
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
20 mai 2008

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
Messages postés
5
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
20 mai 2008

en effet, cette fois c'est la bonne!
cool

merci pour tout