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 :

Test de l'existance d'un Objet en Vba Excel 2000


Sujet :

Macros et VBA Excel

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut Test de l'existance d'un Objet en Vba Excel 2000
    Bonjour,

    je voudrais tester si un controle (Option button) dont je connais le nom existe dans ma feuille Excel - Tester si l'objet est différent de null par exemple pour ensuite récupérer sa valeur.

    Puis je le faire directement sans boucler sur tous les objets de ma feuille, car avec une boucle, cela alourdi le code et le temps d'exécution (j'ai beaucoup de Options buttons dans ma feuille)

    Merci par avance,

    Charly

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Peux-tu nous montrer le code de la boucle que tu utilises ?

    Starec

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut
    Bonjour,

    Voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
       Dim Nom As String
        Dim Ok As Boolean
        Dim Valeur As String
     
        Nom = "Rd_1"
        For Each Obj In ActiveSheet.OLEObjects
            If TypeOf Obj.Object Is MSForms.OptionButton Then _
               Ok = (Obj.Name = Nom)
        Next Obj
        If Ok Then Valeur = ActiveSheet.OLEObjects(Nom).Object.Value
    Il n'y a pas une méthode plus "sioux" ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Pour moi c'est la seule méthode, tu es obligé de parcourir la collection des objets pour détecter le manquant.

    Essaye en modifiant un peut 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
     
        Dim Nom As String
        Dim Ok As Boolean
        Dim Valeur As String
        Dim Obj as Object
     
        Nom = "Rd_1"
        Ok = False
     
        For Each Obj In ActiveSheet.OLEObjects
            If TypeOf Obj Is MSForms.OptionButton Then 
               If Obj.Name = Nom then
                    Ok = True
                    Exit for
               End If
            End If
        Next Obj
        If Ok Then Valeur = ActiveSheet.OLEObjects(Nom).Object.Value
    Je n'ai pas testé, mais :

    1 - Tu n'affecteras à ta variable OK que si le nom de l'object est trouvé, hors dans ton cas tu l'affectes à chaque fois, donc du calcul en plus.
    2 - Avec le Exit For tu quittes ta boucle dés que l'objet est trouvé, donc tu n'as pas à parcourir le reste.

    Je n'ai pas testé, je viens de la taper à la main, mais cela devrait être mieux.

    Starec

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut
    Merci

    je vais gagner un peu de temps avec ta méthode.

    C'est dommage que cela n'existe pas en VBE : en Delphi on peut faire

    if (machin <> Nil) Then ......
    et puis il y a aussi les try et except que l'on peut utiliser

    je pensais que ça existait dans tous les langages.

    Merci encore

    Charly

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function formex(nom As String) As Boolean
    On Error Resume Next
     
     MsgBox (ActiveSheet.Shapes(nom).Caption)
    If Err.Number = 438 Then
    formex = True
    Else
    formex = False
    End If
    End Function

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut
    Merci à tous les 2

    La solution de Random fonctionne très bien

    Charly

  8. #8
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Merci

    je vais gagner un peu de temps avec ta méthode.

    C'est dommage que cela n'existe pas en VBE : en Delphi on peut faire

    if (machin <> Nil) Then ......
    et puis il y a aussi les try et except que l'on peut utiliser

    je pensais que ça existait dans tous les langages.

    Merci encore

    Charly
    Bien sur que ca existe !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim o as OleObject
    ' le resume next est obligatoire ici
    ' mais pas dans le cas d'objet EXCEL (range, sheet, etc...)
    on error resume next
    Set o= ActiveSheet.OLEObjects("toto").object
    If o IS NOTHING then
    ....

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

Discussions similaires

  1. test de l'existence d'un fichier
    Par liozber dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2006, 16h27
  2. Teste si url existe
    Par matique dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/04/2006, 11h03
  3. [WD9] Test si membre existe
    Par Romanops dans le forum WinDev
    Réponses: 4
    Dernier message: 06/02/2006, 15h20
  4. Test de l'existence d'enrgistrements dans une table.
    Par Aurèl90 dans le forum Access
    Réponses: 1
    Dernier message: 29/09/2005, 11h17
  5. [FTP] Test de l'existence d'un fichier sur un serveur ftp
    Par lapartdombre dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 01/08/2005, 14h13

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