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 :

Suppression d'un bouton en VBA sur excel 2016 [XL-2016]


Sujet :

Macros et VBA Excel

  1. #21
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    Oui bien compris, merci;

    Mais quand j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("PDF I").Select
        With ActiveSheet
            .Name = "PDF I"
            .Shapes("Bouton 237").Delete
    cela ne revient-il pas au même, étant positionné sur ma feuille "PDF I" je ne supprime que le bouton 237 de cette feuille ? même si d'autre bouton 237 existe par ailleurs

    Cela équivaut-il bien à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("PDF I").Shapes("Bouton 237").Delete
    Je ne vois pas trop l'intérêt d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("PDF I").Select
        With ActiveSheet
    plutôt que
    A part avoir un code plus complexe et une exécution plus lente et plus désagréable.

    Les Select / Selection ou Activate, c'est à utiliser avec parcimonie et précaution.
    Quand un code commence à prendre de l'ampleur, on s'y perd rapidement dans ce genre de tour de passe-passe.

  2. #22
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    oh que oui je me rapelle de mes debut

    les erreurs que j'essaie en vain visiblement de te faire mettre le doigt dessus n'ont rien a voir avec le vba mais c'est de l'inatention

    pour la derniere fois regarde ce que tu fait j'ai bloqué toutes les autres ligne pour que tu vois mieux ton erreur non pas de vba mais d'inatention
    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
    Sub supprlineimprimable()
     'Dim i As Integer
     'Application.ScreenUpdating = False
     'Application.Calculation = xlCalculationManual
     '
     ' Suppression de l'ancienne feuille "PDF I" 
     '
     'On Error Resume Next
       ' Application.DisplayAlerts = False
        Sheets("PDF I").Delete
        'Application.DisplayAlerts = True
     '
     ' Copie "Imprimable" en "PDF I" et suppression du bouton "valider"
     '
     'Sheets("Imprimable").Copy After:=Worksheets("Imprimable")
     Sheets("PDF I").Select
       ' With ActiveSheet
            '.Name = "PDF I"
           ' .Shapes("Bouton 237").Delete
       ' End With
    question a 1 million
    alors dis moi comment tu peux arriver a selectionner un sheets qui n'existe plus j'aimerais bien savoir le faire moi????????

    tu vois mieux la ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 262
    Points : 479
    Points
    479
    Par défaut
    Je te remercie de prendre du temps pour m'aider,

    ta remarque est bien fondée en effet, mais je ne fais pas attention à la syntaxe de VBA plutôt rebutante, j'ai fais attention uniquement au résultat et j'ai obtenu que je voulais. Par une voie pas très clean je reconnais...

    Ceci étant dis, je vois bien l'inutilité totale de sélectionner une feuille supprimée, mais après avoir copier la feuille par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Imprimable").Copy After:=Worksheets("Imprimable")
    je ne vois pas comment donner le nom "PDF I" à la copie, sauf à ce que l'Active Sheet soit justement la copie, mais cela ne coule pas de source...

    Dans ce cas j'écrirai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Sheets("Imprimable").Copy After:=Worksheets("Imprimable")
        With Sheets("PDF I")
             .Shapes("Bouton 237").Delete
        End With

  4. #24
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je n'avais pas remarqué aussi ce magnifique On Error Resume Next.

    L'idéal pour passer des heures à chercher d'où vient le problème bien masqué, alors qu'il sauterait aux yeux si cette horreur n'était pas là.

    NE JAMAIS UTILISER CA EN PHASE DE DEBUGAGE.
    Et même après débugage, à utiliser le moins possible et, de toute façon, pour des portions de code limitées (idéalement, une seule instruction) avant de l'effacer d'un On Error Goto 0.

    Citation Envoyé par retraite83 Voir le message
    Ceci étant dis, je vois bien l'inutilité totale de sélectionner une feuille supprimée, mais après avoir copier la feuille par
    Sheets("Imprimable").Copy After:=Worksheets("Imprimable")

    je ne vois pas comment donner le nom "PDF I" à la copie, sauf à ce que l'Active Sheet soit justement la copie, mais cela ne coule pas de source...
    Juste après la copie, tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Name = "PDF I"
    et ensuite tu désignes cette feuille par son nom.

  5. #25
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    ben je te l'ai dis deja
    le fait de faire un sheet("toto").copy before:=sheets(2)
    fait une copie de toto qui va s'appeler "toto(2)" et ce toto(2) est tout de suite actif et se trouve en 2d position puisque on la mis (before/avant) sheets(2)
    donc apres le copy
    tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with activesheet
    .name="PDF 1"
    'et ensuite tu peux meme supprimer ton shape
    .shapes("pierrepauljacques").delete
    end with
    tu a eu cet exemple au moins dix fois depuis le debut
    mais tu semble lire en diagonale

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 262
    Points : 479
    Points
    479
    Par défaut
    #24

    j'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    On Error Resume Next
        Application.DisplayAlerts = False
        Sheets("PDF I").Delete
        Application.DisplayAlerts = True
    pour le cas ou 'PDF B' n'existe pas lors de la suppression, j'ai trouvé ça qq part dans une doc et effectivement si je retire "On Error Resume Next" ça plante à l'execution (même si PDF I existe d'ailleurs)

    Encore une fois, le langage m'importe peu, je ne suis pas puriste, seul le résultat compte
    Mais je suis ouvert à m'améliorer et à comprendre ce qui peut poser des problèmes évidemment... donc pour supprimer proprement une feuille et ne pas planter si elle n'existe pas ??

  7. #27
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Encore une fois, le langage m'importe peu, je ne suis pas puriste, seul le résultat compte
    et bien il peut etre la ton probleme depuis le debut

    si le language ne t'interesse pas ( ce que je peux comprendre) vaudrait peut etre mieux faire autre chose car sans ca tu va droit dans le mur

    ca explique d'ailleurs les choses qui t'échappe
    coder en vba dans un classeur demande un minimum quand meme

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 262
    Points : 479
    Points
    479
    Par défaut
    Comprend moi bien, quand je dis que le langage m'importe peu, cela veut seulement dire que c'est seulement un outil et que le résultat compte en priorité.

    Bien sur qu'il faut un minimum et même plus et je plonge petit à petit dans ce langage VBA très intéressant mais à la syntaxe pas très simple et tellement riche qu'on s'y perd.

    Les langages du futur devront être bcp plus intuitifs, mais je pense que VBA a encore de longues années devant lui.

    Tout ça pour dire que je comprends ton purisme en tant qu'expert, mais nous les profanes nous souhaitons d'abord un résultat, franchement qu'importe si la syntaxe que j'ai écrite n'est pas le top, mais si c'est sans risque sur le résultat quelle importance ?

    Vu de ma fenêtre, tu n'es pas de mon avis ?

    Et je vais tester en tenant compte de tes remarques

  9. #29
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    oh oui tu peux les suivre et pas que les miens de conseils

    le resultat quio compte est qui t'est si cher n'en sera que mieux

    quand tu fait une routine comme ca fait le sur papier blanc ou notepad avec tes propres mots

    exemple
    verifier si le nom de la future copie existe ou pas :comment faire
    copier une certaine feuille :comment faire
    la placer a un endroit dans les onglets :comment faire
    nommer cette feuille :comment faire
    suprimer un object dans cette feuille :comment faire

    cherche et essaie de trouver la traduction en vba de chaque ligne et pose les bonnes questions en presentant l'idée que tu a de ta routine dans son intégralité
    ca peut faire rire mais c'est comme ca que je fait et il m'arrive meme parfois avant de convertir l'idée en vba de me rendre compte que je suis deja dans l'erreur sur la question de conception

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 262
    Points : 479
    Points
    479
    Par défaut
    Non je ne ris pas de ton message, bien au contraire, je note ta façon de faire et vais l'appliquer.
    C'est effectivement plus simple pour bcp de gens d'écrire en clair ce que l'on veut faire au lieu de chercher directement de le faire en VBA.

    merci de ce conseil

  11. #31
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    pour le cas ou 'PDF B' n'existe pas lors de la suppression, j'ai trouvé ça qq part dans une doc et effectivement si je retire "On Error Resume Next" ça plante à l'execution (même si PDF I existe d'ailleurs)
    Mettre un On Error Resume Next, c'est comme faire le ménage en planquant la poussière sous le tapis.

    On pense faire disparaitre le problème en le masquant.
    C'est ce qu'on appelle la politique de l'autruche, une technique qui a démontré depuis longtemps son inefficacité, y compris dans le domaine de l'informatique.
    Il est préférable de comprendre d'où vient le problème et de faire en sorte qu'il ne se produise plus.

    Si tu as nommé une feuille "PDF I" et que VBA bug quand tu essayes la supprimer, alors ton code a un problème qui ne se solutionnera pas en se contentant de se bander les yeux.

    Encore une fois, le langage m'importe peu, je ne suis pas puriste, seul le résultat compte
    Dans le langage courant, le cerveau de l'interlocuteur peut rectifier les erreurs et imprécisions de l'émetteur.
    En informatique, ce n'est pas le cas. Chaque mot a son importance, que ce soit dans un code ou une analyse.

    donc pour supprimer proprement une feuille et ne pas planter si elle n'existe pas ??
    Je ne pense pas que ce soit nécessaire dans ton cas puisque tu crées la feuille juste avant par copie et que tu lui donnes un nom.
    Si la feuille n'existe pas au moment où tu veux la supprimer, c'est qu'il y a un problème dans la partie du code qui précède. Et il est préférable de régler le problème en question plutôt que d'en masquer les conséquences.

    Perso, je préfère faire une boucle sur la collection Worksheets pour vérifier qu'une feuille porte ce nom plutôt que de faire un On Error Resume Next.

  12. #32
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    pour le cas ou 'PDF B' n'existe pas lors de la suppression, j'ai trouvé ça qq part dans une doc et effectivement si je retire "On Error Resume Next" ça plante à l'execution (même si PDF I existe d'ailleurs)
    Mettre un On Error Resume Next, c'est comme faire le ménage en planquant la poussière sous le tapis.

    On pense faire disparaitre le problème en le masquant.
    C'est ce qu'on appelle la politique de l'autruche, une technique qui a démontré depuis longtemps son inefficacité, y compris dans le domaine de l'informatique.
    Il est préférable de comprendre d'où vient le problème et de faire en sorte qu'il ne se produise plus.

    Si tu as nommé une feuille "PDF I" et que VBA bug quand tu essayes la supprimer, alors ton code a un problème qui ne se solutionnera pas en se contentant de se bander les yeux.

    Encore une fois, le langage m'importe peu, je ne suis pas puriste, seul le résultat compte
    Dans le langage courant, le cerveau de l'interlocuteur peut rectifier les erreurs et imprécisions de l'émetteur.
    En informatique, ce n'est pas le cas. Chaque mot a son importance, que ce soit dans un code ou une analyse.

    donc pour supprimer proprement une feuille et ne pas planter si elle n'existe pas ??
    Je ne pense pas que ce soit nécessaire dans ton cas puisque tu crées la feuille juste avant par copie et que tu lui donnes un nom.
    Si la feuille n'existe pas au moment où tu veux la supprimer, c'est qu'il y a un problème dans la partie du code qui précède. Et il est préférable de régler le problème en question plutôt que d'en masquer les conséquences.

    Perso, je préfère faire une boucle sur la collection Worksheets pour vérifier qu'une feuille porte ce nom plutôt que de faire un On Error Resume Next.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 262
    Points : 479
    Points
    479
    Par défaut
    Je vais suivre ton conseil et étudier la doc pour voir comment on fait une boucle sur la collection worksheets En fait je fais suppression de la feuille pour le cas où elle existerai mais je ne veux pas de message de confirmation c'est pour cela que j'avais vu cette possibilité avant de faire la copie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ' Suppression de la feuille "PDF I"
    '
    On Error Resume Next
        Application.DisplayAlerts = False
        Sheets("PDF I").Delete
        Application.DisplayAlerts = True
    '
    ' Copie "Imprimable" en "PDF I" et suppression du bouton "valider"
    '
    Sheets("Imprimable").Copy After:=Worksheets("Imprimable")
        With ActiveSheet
            .Name = "PDF I"
            .Shapes("Bouton 237").Delete
        End With
    Si je fais uniquement :
    Sheets("PDF I").Delete il m'est demandé une confirmation de la suppression et ça je ne veux pas

    Je vais aussi étudier ce que m'a dit patricktoulon pour modifier le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Imprimable").Copy After:=Worksheets("Imprimable")
    Autre piste : Peut être y-a-t-il une possibilité de ne pas supprimer la feuille et de forcer la copie avec le nouveau nom même si la feuille existe déjà

  14. #34
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    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 sh As Worksheet
    '********************************************
    'SUPPRESSION DU SHEETS ("PDF 1")SI IL EXISTE
    Application.DisplayAlerts = False    ' ca oui on le garde
    For Each sh In Worksheets    ' on boucle sur tout les sheets du classeur
        If sh.Name = "PDF I" Then sh.Delete    ' si on le trouve on le supprime
    Next
    Application.DisplayAlerts = True    ' ca oui on le garde
    '********************************************
    '
    '*******************************************************************************************************************
    ' maintenant on copie le sheets "Imprimable" et on nomme ce nouveau sheets  "PDF I" et on supprime  du bouton "valider"("bouton 237")
    '
    Sheets("Imprimable").Copy After:=Worksheets("Imprimable")    ' on copie le sheets imprimante juste apres celui ci il s'appelera "Imprimable(2)"
    With ActiveSheet    'avec ce nouveau sheets
        .Name = "PDF I"    ' mais on le renome "PDF 1"
        .Shapes("Bouton 237").Delete    'siupression de son Bouton ("bouton 237")
    End With
    '*********************************************************************************************************************
    pas de gestion d'erreur !!!

  15. #35
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    étudier la doc pour voir comment on fait une boucle sur la collection worksheets
    https://msdn.microsoft.com/fr-fr/VBA...next-statement
    https://msdn.microsoft.com/fr-fr/VBA...s-object-excel

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Sinon passer 6 lignes en VBA sur excel 2016
    Par scuti dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/07/2017, 11h06
  2. Réponses: 0
    Dernier message: 17/02/2017, 12h11
  3. Mot de passe VBA sur Excel ?
    Par ft035580 dans le forum Sécurité
    Réponses: 4
    Dernier message: 30/09/2006, 22h48
  4. [VBA-E]Executer fonction VBA sur Excel sans activer la macro
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/01/2006, 15h34
  5. Envoi de mail via un macro vba sur excel
    Par momolamoto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/12/2005, 19h51

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