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 :

Fonction Find : utiliser un paramètre de type ">0" pour l'argument what [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Points : 14
    Points
    14
    Par défaut Fonction Find : utiliser un paramètre de type ">0" pour l'argument what
    Bonjour à tous,

    je sens que ma question va être bête, mais je n'arrive pas à faire tourner un bout de code qui consiste à effacer une valeur située dans une colonne donnée lorsque celle-ci est supérieure à 0 (je recherche la première valeur trouvée, les autres cellules de la plage étant vides), à partir du numéro de ligne trouvé via un autre "Find".

    D'après mes maigres connaissances, je pense que le problème vient du paramètre de l'argument "what", qui doit chercher une valeur exacte, alors que je cherche la première valeur > 0.

    Voici le petit bout de code incriminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Analyse_RECAP()
     
    Dim CelA As Range
    Dim CelB As Range
     
        Set CelA = Sheets("Traitement").Range("C:C").Cells.Find(what:="POS")
        Set CelB = Sheets("Traitement").Range("P:P").Cells.Find(what:=">0", after:=CelA.Row, LookIn:=xlValues)
        CelB.ClearContents
     
    End Sub
    J'ai également essayé de mettre IsNumeric, de déplacer, ajouter ou enlever des "", mais rien n'y fait, j'obtiens toujours une "erreur d'exécution 13 : Incompatibilité de type"...

    Pouvez-vous m'éclairer sur ce problème ? L'argument "what" peut-il admettre ce type de paramètre et avec quelle syntaxe ?
    Aussi, je n'utilise peut-être pas la bonne procédure pour réaliser ce que je cherche à réaliser, donc si vous avez des suggestions...

    Merci d'avance et à bientôt,

    Loïc.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Find est l'équivalent VBA de la fonction Recherche (Ctrl-F) dans une feuille.
    Est-ce que tu es capable d'utiliser Ctrl-F pour rechercher une valeur >0 ?
    Moi non...

    Il faudrait alors revoir ton code et utiliser plutôt une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = Debut to Fin
    ...
    Next

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    ou utiliser un filtre …

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    merci pour vos suggestions.

    Avant de les avoir, je persistais à essayer d'utiliser la fonction Find, et j'ai compris pourquoi j'obtenais une erreur de type 13 : mon "after" pointait vers une plage et non vers une cellule (une bonne chose de découverte pour moi).

    Donc après correction, et d'autres essais, j'en suis également arrivé à modifier les termes de mon "what" : effectivement, pas possible d'utiliser une valeur de type >0...

    Donc question intermédiaire, si je transforme mon code en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Analyse_RECAP()
     
    Dim CelA As Range
    Dim CelB As Range
     
        Set CelA = Sheets("Traitement").Range(Cells(1, 3), Cells(LastLig, 3)).Find(What:="POS")
        Set CelB = Sheets("Traitement").Range("P:P").Find(What:="*", After:=Cells(CelA.Row, 16), LookIn:=xlValues)
        Cells(CelB.Row, 16).ClearContents
     
    End Sub
    Est-ce que la valeur trouvée pour CelB correspond à la première cellule non vide de la plage (et non pas la première cellule contenant une formule, même si elle a pour résultat "") ? Je pose la question, parce que je n'obtiens pas ce que je veux, alors que la macro ne me renvoie plus de message d'erreur...

    Mais si vous pensez que je m'entête dans cette direction, je me pencherais sur vos suggestions, mais :

    - la solution "boucle" était le type de solution que je voulais éviter, car je ne la maîtrise pas.... Je l'envisagerais uniquement si vous pensez que c'est la seule solution.
    - la solution 'filtre", si je la comprends bien, ne me paraît pas viable, d'une part parce que mon fichier est très lourd, et que l'application d'un filtre conduit à un ralentissement notable de la macro (qui tourne déjà difficilement malgré des tentatives d'optimisation), et d'autre part parce que je dois supprimer un ensemble de valeurs suivant plusieurs conditions et que la multiplication des filtres, même successifs, ne me paraît pas optimal. Ceci étant, je n'ai peut-être pas saisi la méthode que vous me proposez, et si vous êtes d'accord, je veux bien que vous donnez plus de détails pour que je puisse y réfléchir.

    Merci à vous,

    Loïc.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    Ayé, j'ai trouvé une solution (en m'entêtant, mais bon...)

    La clé, ça a été de redéfinir mon fameux "what" (après avoir résolu le "after"), en cherchant une éventuelle constante dans mes données, et la solution était juste sous mon nez : toutes mes valeurs sont des multiples de 20, donc elles contiennent forcément au moins un "0"... La suite a découlé tout seul (notamment le CelA.Row -1, pour commencer la recherche à partir de la même ligne que le premier "POS").

    Je mets le code si toutefois ça peut servir à quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Analyse_RECAP()
     
    Dim CelA As Range
    Dim CelB As Range
     
        Set CelA = Sheets("Traitement").Range(Cells(3, 3), Cells(LastLig, 3)).Find(What:="POS")
        Set CelB = Sheets("Traitement").Range("P:P").Find(What:="0", After:=Cells(CelA.Row - 1, 16), LookIn:=xlValues, LookAt:=xlPart)
        CelB.ClearContents
     
     
    End Sub
    je ne pense pas que ce soit le plus optimal, mais ça fonctionne comme ça, donc ça me va pour l'instant. Je vous remercie tout de même pour vos suggestions.

    A bientôt,

    Loïc.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2014, 09h33
  2. Réponses: 1
    Dernier message: 16/09/2014, 09h58
  3. Fonction ReplaceAll utilisant une variable de type int
    Par melouze dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 18/09/2012, 13h19
  4. [C++ .NET] Comment utiliser fonction Find ?
    Par thecrax dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/08/2006, 09h02

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