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

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    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 du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    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 du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    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.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    Par défaut
    Ca ne marche toujours pas.

    D'autre part, j'ai enregistré une macro pour voir quel code Excel me génère. Je ne pense pas que l'erreur vienne de la fonction find() puisque j'ai un code similaire (j'ai rajouté un activate mais ça ne change pas le résultat).

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Citation Envoyé par julieng31 Voir le message
    Ca ne marche toujours pas.

    D'autre part, j'ai enregistré une macro pour voir quel code Excel me génère. Je ne pense pas que l'erreur vienne de la fonction find() puisque j'ai un code similaire (j'ai rajouté un activate mais ça ne change pas le résultat).
    Ca je m'en suis aperçu que tu as utilisé l'enregistreur.

    Je viens de m'apercevoir d'un truc: tu as déclaré ta fonction comme étant du type double. As-tu regardé ce que te renvoie Column? Ca te renvoie un nombre de typer Long, alors je te suggère d'essayer de déclarer ta fonction comme étant du type Long et non pas Double. Si ce n'est pas ça, alors là je donne ma langue au chat...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function f() As Double
    Dim temp As Range
    Set temp = Cells.Find(what:="cible", after:=ActiveSheet.Cells(1, 1))
    f = temp.Column 
    End Function

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour à tous,

    Pour résumer tous ce qui s'est dit précédemment, tu peux tester ceci
    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
    Sub test()
        Dim Result As Integer
     
        Result = f("cible")
        If Result = 0 Then
            MsgBox "la valeur cherchée n'a pas été trouvée"
        Else
            MsgBox "la valeur cherchée se trouve en colonne : " & Result & " --> " & Split(Cells(1, Result).Address, "$")(1)
        End If
    End Sub
     
    Private Function f(Achercher As String) As Integer
        Dim temp As Range
        Set temp = Cells.Find(what:=Achercher, lookat:=xlWhole)
        If Not temp Is Nothing Then f = temp.Column
    End Function
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    j'ai rajouté lookat:=xlWhole, je pense que ça venait de là parce que maintenant, ça marche !

    Merci à tous.

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par julieng31 Voir le message
    maintenant, ça marche !
    Dans ce cas, n'aurais-tu pas oublié de cliquer sur le bouton ?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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