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 :

[E-00] Recherche du numéro de colonne d'une case identifiée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Par défaut [E-00] Recherche du numéro de colonne d'une case identifiée
    Bonjour,

    je travaille sous Excel 2000 et je suis débutant en VBA.

    Je cherche à obtenir le numéro de colonne de la case qui continent un mot clé.

    Par exemple, si le contenu de la cellule donc je veux connaître le numéro de colonne continent le mot "cible", j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells.find(what:="cible").column
    Cependant, je n'obtiens pas le résultat attendu. Est-ce que quelqu'un pourrait m'apporter un peu d'aide.

    Merci par avance.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Fais attention: Find peut te renvoyer "Nothing", et ainsi la propriété Column fera planter ton programme.

    Donc, stocke ton résultat dans une variable de type Range, teste si ta variable est nothing (If marange Is Nothing), et ensuite si ce n'est pas nothing applique la propriété column.

    Si find ne te fournit pas le résultat prévu, c'est peut-être à cause de ce point décrit dans l'aide:
    Aide VBA sur la méthode Find
    Cette méthode recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Par défaut
    Merci decondelite pour ta réponse.

    En fait, quand je dis que je n'obtiens pas le résultat souhaité, je dois préciser que j'obtiens la valeur #VALEUR comme retour sachant que "cible" existe. Je me pense donc qu'il y a une erreur dans ma manière d'écrire le code.

    Ok pour le teste, je vais le rajouter.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Non je ne vois pas de souci dans ton code, en dehors de ce que je t'ai déjà dit (à propos pour le Is Nothing je t'en ai parlé, mais tu aurais pu le voir dans l'exemple donné dans l'aide).

    Quel est ton nouveau code?

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Par défaut
    Pour faire simple, voici mon code sans la protection si "cible" n'est pas trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Function f() As Double
     
    Set temp = Cells.Find(what:="cible", after:=ActiveSheet.Cells(1, 1))
    temp.Select
    f = temp.Column
     
    End Function

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Alors là je ne suis sûr de rien, mais je pense que c'est temp qui ne colle pas.
    Tu vas devoir prendre non pas une bonne, mais une excellente habitude: déclarer tes variables, et du bon type. Et ça par contre j'en suis sûr que c'est une bonne habitude.

    Pour t'y obliger, commence par rajouter ceci tout en haut de ton module:
    (note que tu peux configurer ton éditeur VBA pour qu'il le rajoute automatiquement pour chacun de tes nouveaux modules)
    Si tu ne déclare pas tes variables, maintenant VBA va te taper sur les doigts.

    Ensuite, tu dois déclarer temp comme un objet de type Range: je te l'ai déjà dit.
    Rajoute donc ça en haut de ta procédure:
    Si tu ne le fais pas, temp sera initialement de type Variant, puis quand tu utiliseras Set il sera du type Variant/Range. Si tu le fais, temp sera du type Range, ce qui est différent.

    Et dis-moi si ça fonctionne déjà mieux. C'est peut-être pas ça le problème (je teste pas c'est à toi de le faire et de te débrouiller un peu ^^), mais en tout cas le fait d'avoir des variables n'étant pas strictement du type souhaité m'a déjà posé de gros problèmes personnellement, et j'y ai passé des heures de débogage avant de le comprendre.

Discussions similaires

  1. [XL-2007] Recherche de numéro de colonne d'une cellule identifiée selon un critère (max)
    Par fuentmat dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/09/2019, 09h43
  2. Réponses: 1
    Dernier message: 05/01/2015, 10h05
  3. [XL-2010] Connaitre les numéros des colonnes d'une sélection multiple en vba
    Par rob1son76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/07/2014, 11h21
  4. [XL-2010] Liste déroulante, recherche du numéro de ligne d'une info de la liste
    Par Patapong dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/01/2013, 21h21
  5. Recherche sur toutes les colonnes d'une table
    Par Romain_marine dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/04/2010, 14h35

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