IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Eviter l'erreur du find


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 15
    Par défaut Eviter l'erreur du find
    Bonjour,

    Je souhaite créer une fonction qui compte les occurrences d'une chaine de caractère (nom + prénom) dans une colonne précise : ici la 5e.
    Pour ce faire, j'utilise la fonction ESTNUM(CHERCHE("Jean Dupont";E2;VRAI;FAUX)) en bouclant sur la cellule où je fais la recherche, et en comptant le nombre de fois où cette fonction renvoie vrai.

    1. Est-ce possible de faire plus simple ?
    2. Je suis confronté au fait que la fonction cherche renvoie #VALUE quand elle ne trouve pas, j'ai voulu éviter ça sous vba en utilisant IFERROR, mais l'erreur arrive quand même.. que faire ?


    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Public Function nombre_postu(nom)
    '
    ' Tri_prospect Macro
        Dim i, j, compteur As Integer
    ' me permet de trouver jusqu'ou boucler, le document changeant de taille
        i = 1
        While Worksheets(1).Cells(i, 1).Value <> ""
            i = i + 1
        Wend
        compteur = 0
        j = 1
        While j < i
            j = j + 1
            k = Worksheets(1).Cells(j, 5).Value
            If Application.WorksheetFunction.IfError(Application.WorksheetFunction.Find(nom, Worksheets(1).Cells(j, 5).Value), False) Then
                compteur = compteur + 1
            End If
        Wend
        nombre_postu = compteur
     
    End Function
    Merci !!

    Antdec

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    Oui, il y a une fonction qui existe exprès pour faire cela : NB.SI
    En VBA : CountIf

    Pas besoin de boucle, et comme la fonction compte le nombre d'occurrences, elle ne renvoie pas d'erreur mais zéro si elle ne trouve rien.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 15
    Par défaut
    Merci de votre réponse,
    Mon problème vient justement du fait que je ne puisse pas utiliser NB.SI puisque mes cases ne contiennent pas exactement le nom et le prénom, mais parfois plusieurs noms et prénoms, d'où mon utilisation de FIND ...

    Merci

    Andec

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 572
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 572
    Par défaut
    Bonjour à tous

    NB.SI accepte les * pour une recherche à l'intérieur d'une chaîne. Encadrer la chaîne recherchée de *

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous

    Moi j'utilise en VBA Instr() elle renvois 0 si elle ne trouve pas sinon un chiffre qui correspond au premier caractère de la chaine recherchée

    L'équivalent de la Fonction TROUVE() pour les formules Excel



    Sinon concernant ton code

    Il est inutile de boucler pour connaitre la dernière ligne une ligne de code suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Der_Ligne = [A1].End(xlDown).Row
    En suite la boucle While ... Wend est la boucle la plus lente (vieux reliquat du basic) je te conseille les boucles : Do While ... Loop ou Do ... Loop While (ou loop until tout dépend si tu veux dire Tant Que ou Jusqu'à ce que )

    @ bientôt

  6. #6
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 311
    Par défaut
    Citation Envoyé par Antdec Voir le message
    Pour ce faire, j'utilise la fonction ESTNUM(CHERCHE("Jean Dupont";E2;VRAI;FAUX)) ...
    La fonction CHERCHE n'a que 2 ou 3 arguments, pas 4

    Sinon comme le suggère 78chris, il FAUT utiliser NB.SI et oublier VBA dans votre cas.
    =NB.SI(A1:A4;"*Jean Dupont*")
    Stéphane

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 15
    Par défaut
    Merci pour vos réponses !

    J'ai fini par utiliser * * dans NB.SI ce qui m'a grandement facilité la vie, j'ai pensé au début que c'était % comme en SQL, mais j'aurai du plus me renseigner.

    Bien à vous,

    Antdec

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Message d'erreur: Cannot find file ID 2
    Par glanumf dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/05/2007, 16h08
  2. Eviter les erreurs de saisie
    Par julo56 dans le forum C++
    Réponses: 5
    Dernier message: 06/06/2006, 00h04
  3. Eviter les erreurs lors de l'utilisation des compo Tsocket
    Par Coussati dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/02/2006, 19h14
  4. [Sécurité] Eviter des erreurs de textures ....
    Par cyber_N dans le forum OpenGL
    Réponses: 14
    Dernier message: 09/09/2005, 16h49
  5. Réponses: 2
    Dernier message: 21/06/2004, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo