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 :

Problèmes rechercher valeur [XL-2010]


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
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2015
    Messages : 49
    Par défaut Problèmes rechercher valeur
    Bonjour ,

    Je vous contact suite à un problèmes que je rencontre dans mon code je veut grâce à cette ligne là assigner une plage de recherche qui me permet ensuite de trouver une valeur et lorsque cette valeur est trouver me donner le numéro de ligne :

    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
    Dim Trouve As Range, PlageDeRecherche As Range
        Dim Valeur_Cherchee As String, AdresseOrTrouvee As String, AdresseDestTrouvee As String
     
        Valeur_Cherchee = Box_Origine.Value 'on cherche la valeur dans Box_Origine
     
        Set PlageDeRecherche = Sheets("Site").Columns(2) ' On définie la plage de recherche
     
        Set Trouve = PlageDeRecherche.Cells.Find(What:=Valeur_Cherchee, LookAt:=xlWhole)   ' On recherche Valeur_Cherchee dans la plage de recherche
     
        If Trouve Is Nothing Then  'Si il ne trouve rien
     
            AdresseOrTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
     
        Else
     
            AdresseOrTrouvee = Trouve.Row
     
        End If
    Je précise que ce code est fonctionnel normalement , mais lorsque j'ai changer le tableau où je cherche mes valeurs pour l'adapter à un tableau de base de données j'ai un soucis au niveau de la PlageDeRecherche qui ne veut pas se mettre correctement x: , Voici le tableau :


  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si tu utilises un ListObjects, tu as la possibilité de ne parcourir que la zone des données

    ta capture écran laisse à penser que ton tableau commence en colonne B... qui est donc la première colonne de ton tableau

    si ce n'est pas le cas, il suffit d'adapter le bloc "With" du code, pour indiquer le bon numéro de colonne du tableau

    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
    Sub Recherche()
    Dim Valeur As String
    Dim Resultat As Range
    Dim LigResult As Long
     
    Valeur = "toto"
     
                    ' ton tableau / uniquement ses données / colonne 1 du tableau
    With Sheets("Feuil1").ListObjects(1).DataBodyRange.Columns(1)
        Set Resultat = .Find(Valeur, , , xlWhole)
        If Not Resultat Is Nothing Then
            LigResult = Resultat.Row
            MsgBox LigResult
        Else
            MsgBox Valeur & " non trouvée dans " & .Address
        End If
    End With
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2015
    Messages : 49
    Par défaut
    Oui je me suis tromper j'ai oublier de montrer qu'il y avait une colonne " A "
    Et comme par exemple la recherche ce fait dans la colonne B uniquement cela donnerais donc cela ?


    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
      Dim Trouve As Range, PlageDeRecherche As Range
        Dim Valeur_Cherchee As String, AdresseOrTrouvee As String, AdresseDestTrouvee As String
     
        Valeur_Cherchee = Box_Origine.Value 'on cherche la valeur a chercher dans Box_Origine
     
       With Sheets("Site").ListObjects(1).DataBodyRange.Columns(2) ' on definie la feuille et ?????????
     
        Set Trouve = .Find(What:=Valeur_Cherchee, LookAt:=xlWhole)   ' On recherche Valeur_Cherchee 
     
        If Trouve Is Nothing Then  'Si il ne trouve rien
     
            AdresseOrTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
     
        Else
     
            AdresseOrTrouvee = Trouve.Row
     
        End If
        End With
    j'aimerais aussi avoir des explications sur cette ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("Site").ListObjects(1).DataBodyRange.Columns(2)
    Donc le Sheets designe la feuille où l'on cherche , le DataBodyRange.Columns la colonne où l'on cherche mais le ListObjects correspond à quoi ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Le "Tableau Excel" que tu crée en utilisant le menu "Insertion>>Tableau" est un objet VBA "ListObject"

    donc ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("Site").ListObjects(1).DataBodyRange.Columns(2)
    on fait référence au premier "Tableau" de la feuille "Site" (je suis parti du principe qu'il n'y en avait qu'un seul !)
    si tu avais plusieurs Tableaux dans ta feuille, tu peux remplacer l'index du tableau (le numéro "1") par son nom

    si le tableau s'appelle "Tableau_1" par exemple, on aurait pu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("Site").ListObjects("Tableau_1").DataBodyRange.Columns(2)
    plus précisément, on pointe uniquement les données du tableau (DataBodyRange), et encore plus précisément sur la seconde colonne de ce tableau

    on travaille directement dans le tableau, ce qui permet de faire abstraction de son positionnement sur la feuille

    si ton tableau commençait par exemple en colonne B, la ligne de code juste au dessus fait référence à sa seconde colonne, soit la colonne C
    tu as donc parfaitement compris comment il fallait modifier le numéro de colonne, puisque ton tableau commençait en colonne A

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2015
    Messages : 49
    Par défaut
    Bon , j'ai vue que mon tableau avait un nom donc en suivant tes conseil je l'ai mis dans le 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
    22
    23
    24
    25
    26
    27
     '//////Code pour le site d'origine-----------------------------------------
     
        Dim Trouve As Range, PlageDeRecherche As Range
        Dim Valeur_Cherchee As String, AdresseOrTrouvee As String, AdresseDestTrouvee As String
     
        Valeur_Cherchee = Box_Origine.Value 'on cherche la valeur dans Box_Origine
     
       With Sheets("Site").ListObjects("Tableau__10.128.8.30_BSO_OBT_Magasins").DataBodyRange.Columns(2)
     
        Set Trouve = .Find(What:=Valeur_Cherchee, LookAt:=xlWhole)   ' On recherche Valeur_Cherchee dans la plage de recherche
     
        If Trouve Is Nothing Then  'Si il ne trouve rien
     
            AdresseOrTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
     
        Else
     
            AdresseOrTrouvee = Trouve.Row
     
        End If
        End With
     
        Range("Feuil2!B5") = Sheets("Site").Cells(Trouve.Row, 1).Value 'On assigne le nom du site
        Range("Feuil2!B6") = Sheets("Site").Cells(Trouve.Row, 2).Value 'On assigne le nom d'entrepôt
        Range("Feuil2!B7") = Sheets("Site").Cells(Trouve.Row, 3).Value 'On assigne l'adresse
        Range("Feuil2!B8") = Sheets("Site").Cells(Trouve.Row, 4).Value ' On assigne l'adresse 2
        Range("Feuil2!B9") = Sheets("Site").Cells(Trouve.Row, 5).Value & Sheets("Site").Cells(Trouve.Row, 6).Value ' On assigne la  ville et le code postale




    Rien n'a l'air de fonctionner :\ , quand je debug mon programme Visiblement il ne met rien dans Trouve et m'affiche Nothing donc c'est que je dois avoir un soucis à ce niveau là .

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'ai testé ma proposition sur un tableau identique au tient (j'ai recopié les données de ta capture écran)
    comme tu le vois, j'avais testé avec la valeur toto, que je trouvais s'il y avait un toto en colonne B, et que je ne trouvais pas dans le cas contraire

    qu'est ce que "Box-Origine" ? un contrôle ou une plage nommée ?


    est-il possible de voir ton fichier ? seul cet onglet m'intéresse, tu peux supprimer les autres
    et éventuellement remplacer les adresses par des chiffres par exemple (pour que ça reste confidentiel)

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

Discussions similaires

  1. [XL-2002] problème macro excel pour rechercher valeur dans un intervalle
    Par lanomade04 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/05/2011, 16h59
  2. Problème : Recherche de valeur sur Excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/08/2007, 15h45
  3. Problème : Recherche de valeur sur Excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/08/2007, 16h04
  4. Problème de valeur null dans un recordset
    Par Petzouille57 dans le forum Access
    Réponses: 3
    Dernier message: 19/05/2005, 11h27
  5. problème recherche d'un champ sous paradox
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/04/2005, 15h04

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