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 :

Différence de fonctionnement entre ThisWorkbook et une macro ? [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut Différence de fonctionnement entre ThisWorkbook et une macro ?
    Bonjour,

    j'ai 2 séquences quasiment identiques :
    la première est dans une macro est fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ' Copie "Modele" en "SIG"
            Sheets("Modele").Copy After:=Worksheets("Modele")
                With ActiveSheet
                .Name = "SIG"
                         If Param.Range("D2") = user Then    ' si User, autorisation restreinte
                        .Shapes("Parchemin : horizontal 7").Delete
                        .Shapes("Parchemin : horizontal 6").Delete
                        Else
                        End If
                End With
    La seconde est incluse dans Thisworkbook open d'un classeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ' Copie "Modele" en "Catalogue"
            Sheets("Modele").Copy After:=Worksheets("Modele")
                With ActiveSheet
                .Name = "Catalogue"
                        If Param.Range("D2") = user Then    ' si User, autorisation restreinte
                        .Shapes("Parchemin : horizontal 4").Delete
                        Else
                        End If
                End With
    et je n'arrive pas à trouver ce qui ne va pas, j'ai :
    Erreur d'exécution 5 : argument ou appel de procédure incorrect
    J'ai vérifié : le bouton s'appelle bien : "Parchemin : horizontal 4".

    Je me demandai si le fait d'être dans Thisworkbook à l'open pouvait gêner ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    J'aurais tendance à dire qu'elle devrait tourner dans ThisWorkbook.

    Par contre tu utilises ActiveSheet, rien ne te dit que ce sera la bonne feuille d'activée à l'ouverture.
    Quand on peut, on doit utiliser l'objet concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("ta_feuille_ayant_le_shape")
    ou, comme je viens de voir que tu la renommes (à l'ouverture ça me parait étrange de procéder ainsi ?!? Elle aurait dû l'être dès sa création), Feuilx étant le codeName de ta feuille et non son nom d'onglet
    essaie déjà avec ça.
    eric

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Bonjour,

    j'ai essayé, toujours le même problème, en pas à pas je suis bien sur la bonne feuille au moment du Shape...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Essaie ainsi alors : met-là dans un module Standard, et dans open tu appelles cette procédure.
    eric

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Bonjour,

    ton idée me semble bonne pour être dans la même logique que lorsque la séquence est dans une macro, mais je ne sais pas trop faire :

    - je met le code de "ThisWorkbook" dans un modulexx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub yy()
    …
    …
    End Sub
    c'est ça ?

    Ensuite comment j'appelle modulexx dans "Thisworbook" ?

    merci

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    mais je ne sais pas trop faire :
    Il suffirait de mettre ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    yy
    End Sub
    mais ça ne changerait rien à ton problème (mis à part éviter d'avoir deux fois le même code inscrit dans ton code VBA pour rien (donc autant le faire)

    Je viens de faire un essai chez moi et pas de soucis, ça ne provoque pas d'erreur à l'ouverture du fichier.

    Quelques modifications du code mais qu ne changeront à mon avis rien au problème à moins que le soucis vienne du ActiveSheet, faut vraiment éviter de les trainer trop longtemps.
    Regarde dans le code ci-dessous, effectivement on a pas le choix d'utiliser ActivSheet pour pointer sur le nouvel onglet créé, du coup on passe tout de suite ActiveSheet dans une variable, comme ça même si la feuille active change, la variable elle, pointe toujours sur la bonne feuille.
    Pour info With ActiveSheet, ne garantie pas de toujours pointer sur la bonne feuille, si la feuille active change en cours de route le code inclus dans le With pointera le nouvel onglet actif...


    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
    Private Sub Workbook_Open()
    NewF
    End Sub
     
     
    'Dans le module
    Sub NewF()
    Dim NewSheet As Worksheet
     
    ' Copie "Modele" en "Catalogue"
            ThisWorkbook.Sheets("Modele").Copy After:=ThisWorkbook.Worksheets("Modele")
            'On pointe la nouvelle feuille créée
            'Avantage, si l'utilisateur change de feuille en cours de route pendant l'execution de la macro, on pointe toujours sur la bonne feuille
            Set NewSheet = ActiveSheet
            With NewSheet
                .Name = "Catalogue"
                If .Range("D2").Value = "" Then    ' si User, autorisation restreinte
                    .Shapes("Parchemin : horizontal 4").Delete
                Else
                End If
            End With
     
    End Sub

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Un code dans un module standard peut être appelé de n'importe où, un code dans ThisWorkbook ne peut être exécuté que de ThisWorkbook ou par déclinaisons de ThisWorkbook si la macro est déclarée en public.

    ThisWorkbook.MaMacro

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

Discussions similaires

  1. Différence de fonctionnement entre jvRichEdit et RichEdit
    Par Droïde Système7 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 17/09/2008, 19h26
  2. [SimpleXML] Différence de fonctionnement entre localhost / serveur
    Par bractar dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/05/2008, 18h58
  3. créer un évenement dans ThisWorkbook par une macro
    Par jmcrib dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/09/2007, 11h56
  4. Probleme de conversion entre . et , avec une macro excel
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/01/2007, 22h26
  5. Différence de fonctionnement entre deux animations
    Par jpboogie dans le forum Flash
    Réponses: 3
    Dernier message: 09/10/2006, 10h32

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