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 :

Utiliser un nom de plage défini sous Excel dans VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut Utiliser un nom de plage défini sous Excel dans VBA
    Bonsoir le Forum

    Je voudrais utiliser dans une fonction VBA un nom de plage défini par le gestionnaire de noms sous Excel. En fait sous VBA je veux rechercher si une chaine se trouve dans la plage. J'ai pensé utiliser la méthode "Match" de WorksheetFunction en essayant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        isTrouve = Application.WorksheetFunction.Match(sName, Range([Workbooks(iWB_MainFile).name]!FRance), 0)
    sName
    contient la chaine à rechercher dans le classeur
    "([Workbooks(iWB_MainFile).name]"
    FRance
    est le nom de la plage et sous Excel il fait référence à
    =RessProf!$A$2:$A$93
    ou "RessProf" est le nom de la feuille où se trouve cette plage.
    Merci pour vos indications sur mon/mes erreur(s)
    Cordialement
    clem256.

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Essaie comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    isTrouve = Application.WorksheetFunction.Match(Range("sName"), _
    Workbooks(iWB_MainFile).Worksheets("RessProf").Range("FRance"), 0)
    Cordialement.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut
    Merci pour le retour

    J'ai essayé et j'ai: "Erreur d'exécution '1004', la méthode 'Range' de L'objet '_Global' a échoué.

    Je dois préciser que 'sName" est un nom de variable qui contient la chaine à rechercher, tout comme "FRance" est le nom de la plage de cellules de la feuille "RessProf".
    Merci.

  4. #4
    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,

    Match correspond à la fonction EQUIV de feuille de calcul et fonctionne avec une seule colonne, d'où le message d'erreur …

    A moins qu'il n'y ait pas de correspondance dans la colonne, préférer alors Application.Match

    Pour rechercher sur plusieurs colonnes, voir aussi du côté de l'aide VBA de la fonction Find

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut
    Bonjour Marc
    avec Find j'ai la même erreur. La plage de nom "FRance", correspond bien à une seule colonne. je continue à investiguer.

    Clem256

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    'sName" est un nom de variable qui contient la chaine à rechercher
    Alors ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    isTrouve = Application.WorksheetFunction.Match(sName, _
    Workbooks(iWB_MainFile).Worksheets("RessProf").Range("FRance"), 0)
    Cordialement.

  7. #7
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut utiliser un nom de plage defini sous excel dans VBA
    Bonjour,

    la dernière proposition marche si l'on met le nom du classeur entre " " et si sname est un string (a, b ......)
    si sname est une valeur numérique (même avec la plage au format texte), étrangement l'erreur 1004 est renvoyée.

    avec "evaluate" le problème ne se pose pas.

    cordialement.

  8. #8
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par gFZT82 Voir le message
    Alors ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    isTrouve = Application.WorksheetFunction.Match(sName, _
    Workbooks(iWB_MainFile).Worksheets("RessProf").Range("FRance"), 0)
    Cordialement.
    j'ai toujours une erreur
    Impossible de lire la propriété 'Match' de la classe WorksheetFunction
    Est-ce que l'appel à cette fonction 'Match' en passant par 'WorkSheetFunction' est correct? Je ne vois pas où est le problème car en testant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PlageNoms = Workbooks(iWB_MainFile).Worksheets("RessProf").Range("FRance")
    puis j'affiche bien le nombre de lignes de la plage; ce qui me laisserait à penser qu'on y accède correctement.
    Merci.

  9. #9
    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
    Citation Envoyé par Marc-L Voir le message
    A moins qu'il n'y ait pas de correspondance dans la colonne, préférer alors Application.Match
    Il faut juste tester ensuite la variable de type Variant si elle est en erreur via la fonction IsError

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    __________________________________________________________________________________________
    Les seins des femmes sont la preuve qu'un homme peut se concentrer sur deux choses à la fois !

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Tu peux essayer comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Plage As Range, C As Range
    Set Plage = Workbooks(iWB_MainFile).Worksheets("RessProf").Range("FRance")
    Set C = Plage.Find(sName, , xlFormulas, xlPart)
    If Not C Is Nothing Then
        MsgBox sName & " a été trouvé à la ligne : " & C.Row
    Else
        MsgBox sName & " n'a pas été trouvé dans la plage " & Plage.Address
    End If
    Cordialement.

  11. #11
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut
    OK. Mais j'aimerais bien savoir si c'est la fonction "Match" qui génère une erreur par que la chaine recherchée n'est pas trouvée ou bien si c'est l'instruction qui est incorrecte et génère cette erreur "Impossible de lire la propriété 'Match' de la classe WorksheetFunction". Ce n'est pas très clair.
    Merci.

  12. #12
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Il faut juste tester ensuite la variable de type Variant si elle est en erreur via la fonction IsError
    Merci. Dans le cas présent comment tu écrirais le code, car je ne sais pas vraiement d'où vient l'erreur ?

  13. #13
    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
    Citation Envoyé par clem256 Voir le message
    si c'est la fonction "Match" qui génère une erreur par que la chaine recherchée n'est pas trouvée ou bien si c'est l'instruction qui est incorrecte et génère cette erreur
    Les deux mon Capitaine !

    Donc commencer par chercher une valeur présente éliminerait à terme le problème de syntaxe, non ?

    Et comme déjà évoqué, il y a aussi la fonction Find sans souci, si du moins elle est respectée, voir l'exemple de l'aide …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        V = Application.Match({valeur cherchée}, {colonne}, 0)
        If IsError(V) {}
    Match équivaut à EQUIV dans la feuille de calcul, voir son aide …

  14. #14
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut utiliser un nom de plage defini sous excel dans VBA
    bonjour,

    la dernière proposition de gFZT82 marche très bien.

    je ne comprends pas pourquoi (comme ecrit plus haut) avec une plage FRance contenant des lettres et des chiffres et le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sname = " donnée choisie"
     
    isTrouve = Application.WorksheetFunction.Match(sName, _
    Workbooks("classeur1").Worksheets("feuil1").Range("FRance"), 0)
     
    msgxbox istrouve
    si ma donnée choisie est "b" VBA renvoie le bon résultat
    si ma donnée choisie est "1" VBA renvoie un message d'erreur comme je l'ai indiqué plus haut.

    cordialement

  15. #15
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut utiliser un nom de plage défini sous Excel dans VBA
    @ nibledispo

    Peut-être que cette fonction ne reconnait pas "1" comme une string, mais le considère comme type nombre. Quelle est la valeur de l'argument type?

  16. #16
    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

    Du reste dans l'exemple de l'aide d'EQUIV, point de guillemet pour chercher une valeur numérique …

  17. #17
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    As-tu testé le code du post #10 ?

    Cordialement.

  18. #18
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut
    Oui, j'ai testé et cela fonctionne. Je souhaitais juste vérifier un ou deux points avant de passer à l'état "résolu". Je le ferai certainement ce soir. Merci encore á tous pour votre aide.
    Cordialement
    Clem256

  19. #19
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut utiliser un nom de plage defini sous excel dans VBA
    Bonsoir,

    Les valeurs numériques de ma plage d'essai étaient au format texte. C'est pourquoi j'ai mis les guillemets.

    Il est vrai toutefois (j'avais omis de le signaler) que si on ne met pas les guillemets le résultat est bien renvoyé.

    Tout cela n'a aucun sens : le traitement ne peut faire un distinguo entre données numérique et données caractère d'une plage qui n'a qu'un seul format.

    Peut être faut-il préciser le format de la plage FRance dans le code et nom dans Excel ? Je vais essayer.
    Le mieux est de toute évidence de se passer de Worksheetfunction , formula et que sais-je encore.

    Cordialement

  20. #20
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut utiliser un nom de plage défini sous Excel dans VBA
    Merci pour ces remarques. Je vais fermer la dicussion et passer le point à résolu.

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

Discussions similaires

  1. VBA: Appeler une Liste/Matrice définie sous Excel
    Par vatfer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/07/2010, 11h48
  2. [XL-2007] Noms de tableaux/matrices sous Excel 2007
    Par emileprosky dans le forum Excel
    Réponses: 2
    Dernier message: 03/04/2010, 13h26
  3. [E-00] utiliser le nom de colonne définie
    Par tiyolx dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/11/2008, 14h37
  4. Réponses: 2
    Dernier message: 05/07/2008, 10h54

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