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 :

Choisir une table avec la méthode .ShowDataForm


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut Choisir une table avec la méthode .ShowDataForm
    Bonjour à tous,

    J'ai découvert récemment la méthode .ShowDataForm de l'objet Worksheet qui correspond à l'outil Formulaire de l'onglet Données (non natif dans le ruban).
    J'ai dans un classeur plusieurs feuilles dont une avec plusieurs tableaux, si je clic sur une ligne d'un tableau et ensuite sur Formulaire de l'onglet données il me prend bien le tableau sélectionné. Donc à la main tout vas bien.


    Mon problème est le suivant :
    Si j'utilise ActiveSheet.ShowDataForm c'est le formulaire du tableau commençant en A1 qui est pris en compte. (peu importe la sélection)
    Si pas de tableau en A1, j'ai une erreur.


    Savez vous comment indiquer la plage qui doit être prise en compte pour la méthode .ShowDataForm ?
    Quel Objet VB se cache derrière cette méthode ?

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    De ce que je me souvient lorsque j'ai utilisé ShowDataForm il faut d'abord sélectionner la Range qui correspond à ton tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("Tableau1").Select
    ActiveSheet.ShowDataForm
     
    Range("Tableau2").Select
    ActiveSheet.ShowDataForm

  3. #3
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour cerede2000,

    J'ai déjà essayé comme ça et ça ne fonctionne pas.

    Voila ce que je viens de tester :
    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
    Sub test()
        With ActiveSheet
            'Création d'un tableau nommé Tableau1
            .[A1] = "Tab1":   .[A2] = "test1"
            .ListObjects.Add(xlSrcRange, Range("$A$1:$A$2"), , xlYes).Name = "Tableau1"
            'Création d'un tableau nommé Tableau2
            .[D1] = "Tab2":   .[D2] = "test2"
            .ListObjects.Add(xlSrcRange, Range("$D$1:$D$2"), , xlYes).Name = "Tableau2"
     
            'Affiche le formulaire du tableau1
            .Range("Tableau1").Select
            .ShowDataForm
     
            'Affiche le formulaire du tableau1 malgré la selection du tableau2
            .Range("Tableau2").Select
            .ShowDataForm
        End With
    End Sub
    J'ai aussi testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test2()
        With ActiveSheet
            'Création d'un tableau nommé Tableau2
            .[D1] = "Tab2":   .[D2] = "test2"
            .ListObjects.Add(xlSrcRange, Range("$D$1:$D$2"), , xlYes).Name = "Tableau2"
     
            'Erreur d'execution 1004
            'methode ShowDataForm a echouee
            .Range("Tableau2").Select
            .ShowDataForm
        End With
    End Sub
    J'ai l'impression que .ShowDataForm prend le tableau placer en A1 et s'il n'y en pas, une erreur est levée.

  4. #4
    Expert éminent
    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
    Par défaut
    Bonjour !

    Cela peut dépendre de la version d'Excel - au passage non précisée dans le préfixe de cette discussion ! - car
    il me semble bien avoir lu une correction avec la sortie de la version 2013 …

    Sinon pour les versions où la méthode ShowDataForm reste bloquée sur la première table
    (même si pas située en A1, peu importe …), il y a une double astuce à opérer :

    • désactiver DisplayAlerts au cas où la table n'a pas encore de donnée par exemple;

    • appeler directement le contrôle par son Id au lieu de la méthode …

    Evidemment une cellule de la table doit être sélectionnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
        Cells(4).Select
        Application.DisplayAlerts = False
        CommandBars.FindControl(Id:=860).Execute
        Application.DisplayAlerts = True
    End Sub
    Testé sous Excel 2003, en espérant l'Id n'a pas été modifié dans les versions supérieures
    sinon ce n'est pas difficile à trouver en bouclant sur les contrôles …

    ______________________________________________________________________________________________________

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

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Vu sur un autre forum, je ne sais pas ce que ça vaut!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub doclaude()
    Range("a6").CurrentRegion.Select
    ActiveWorkbook.Names.Add Name:="base_de_données", RefersToR1C1:=Selection
    ActiveSheet.ShowDataForm
    ActiveWorkbook.Names("base_de_données").Delete
    Range("a1").Activate
    End Sub
    Dernière modification par Domi2 ; 19/04/2016 à 07h44.

  6. #6
    Expert éminent
    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
    Par défaut

    Salut Robert !

    Cela fonctionne bien sous une version française d'Excel 2003.
    Pour une version anglaise c'est Database
    Je préfère ma solution évitant de créer puis de supprimer la plage pour chaque tableau et fonctionnant quelle que soit la langue.
    Je sais, les goûts, les couleurs …
    Par contre pour un tableau unique ne commençant pas en A1, la plage nommée est bien pratique ! (si mono langue …)
    Antony, tu as deux voies à explorer …

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

Discussions similaires

  1. [Access] Nom d'une table avec un espace dans SQL
    Par Corsaire dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 15h50
  2. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  3. Réponses: 4
    Dernier message: 16/03/2004, 14h16
  4. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15
  5. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34

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