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 :

Image bouton à l'ouverture fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable

    Informations forums :
    Inscription : Janvier 2022
    Messages : 156
    Points : 192
    Points
    192
    Par défaut Image bouton à l'ouverture fichier
    Bonjour le forum,
    Je reviens sur mon probléme d'image cadenas à l'ouverture.

    Nom : 6.png
Affichages : 164
Taille : 12,3 Ko

    Ce cadenas est un bouton avec 2 images groupées, un cadenas fermé et un ouvert, et associé à une macro (Voir en feuille Acceuil) qui vérifie la saisie du mot de passe (1234).
    Pour résoudre le probléme, j'ai essayé d'associer cette macro à l'ouverture du fichier, mais çà bug.

    Nom : 1.png
Affichages : 210
Taille : 87,5 Ko

    Le fichier s'ouvre sans bug, mais si vous réactivez la ligne, çà buggera.
    forum.xlsm

    Si quelqu'un trouve la solution, bravo.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 024
    Points
    2 024
    Par défaut
    Salut,

    Comme je te l'ai déja expliqué, commence par virer ces horribles Application.ScreenUpdating = False.
    Ou donne une raison valable de garder ces instructions à ce stade de ton développement (en cours).

    Ensuite, concernant ton problème:
    Je ne détecte pas de plantage, mais je remarque que la boite de dialogue demandant le mot de passe n'apparait pas.
    Je suppose que c'est du au fait que tu sauvegardes le fichier sous un autre nom.
    N'est-ce pas plutot une copie de sauvegarde que tu veux faire ?
    Dans ce cas, utilises SaveCopyAs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbt.SaveCopyAs UserAppli
    PS: UserAppli déclaré en variant, utilisé alternativement comme chaîne, puis tableau, puis encore chaine .....

  3. #3
    Membre habitué
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable

    Informations forums :
    Inscription : Janvier 2022
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Salut,
    Comme je te l'ai déja expliqué, commence par virer ces horribles Application.ScreenUpdating = False.
    Ou donne une raison valable de garder ces instructions à ce stade de ton développement (en cours).
    Cette instruction est souvent conseillée donc j'attendrais des confirmations pour les enlever.

    Je ne détecte pas de plantage, mais je remarque que la boite de dialogue demandant le mot de passe n'apparait pas.
    Elle apparaissait au début, mais le bug l'a remplacé.

    Je suppose que c'est du au fait que tu sauvegardes le fichier sous un autre nom.
    N'est-ce pas plutot une copie de sauvegarde que tu veux faire ?
    Dans ce cas, utilises SaveCopyAs
    J'ai besoin d'un clone qui s'ouvre sous le nom de l'utilisateur dans le cadre d'un partage de fichier.
    C'est cette vidéo qui m'a donné la marche à suivre pour le clone (à 10mn)
    Les modifications sont centralisées sur le fichier commun avec le bouton quitter.

    Là j'ai pris une partie du code de la macro du bouton, mais çà bug. (Voir cette vidéo à 9mn)
    Nom : 3.png
Affichages : 137
Taille : 47,4 Ko
    forum.xlsm
    Merci

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 024
    Points
    2 024
    Par défaut
    Citation Envoyé par frunch Voir le message
    Cette instruction est souvent conseillée donc j'attendrais des confirmations pour les enlever.
    Ca, c'est un argument d'autorité, donc pas valable.

    Je vais te donner les avantages et désavantages de cette instruction lorsque l'on est en cours de développement.
    Avantages:
    - Augmente les performances.
    Désavantage:
    - Masque les retours visuels
    - Nuit à la compréhension du déroulement des opérations.
    - Interfère avec le débogage.

    3 contre 1, les désavantages surclassent les avantages.

    De plus, l'optimisation, s'il y a lieux, c'est une fois que l'on a obtenu le comportement désiré. Jamais avant.
    Je te laisse faire une recherche sur cette citation:
    "Premature optimisation is the root of all evil" (Donald Knuth).

    Citation Envoyé par frunch Voir le message
    J'ai besoin d'un clone qui s'ouvre sous le nom de l'utilisateur dans le cadre d'un partage de fichier.
    Oublions le coté Excel pour un instant.
    Quel est ton besoin ? Partager / centraliser les données ?
    Dans ce cas, je préconise une architecture Front end - Back end.

    Coté front end, un classeur Excel est un choix tout à fait valable.

    Coté Back end, plusieurs solution sont possible, il faut peser le pour et le contre.
    Quelques exemple:
    Fichier texte: Simple, mais casse-gueule à gérer.
    Classeur Excel sans macro: Assez simple, mais pose des problèmes de partage.
    Base de données: Plus compliqué, mais prend en charge les conflits.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 024
    Points
    2 024
    Par défaut
    Je vient de remarquer que tu protèges ta feuille.
    Est-ce que tu retires la protection avant de modifier cette dernière ?

  6. #6
    Membre habitué
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable

    Informations forums :
    Inscription : Janvier 2022
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Salut,
    C'est vrai qu'à part toi y'a pas grand monde pour répondre.
    Mais j'ai pas besoin de ta stratégie, j'ai évoqué celle des vidéos.
    Je vient de remarquer que tu protèges ta feuille.
    Est-ce que tu retires la protection avant de modifier cette dernière ?
    Beh ouais je sais tu réponds puis aprés tu regardes le code.
    Cà fais 2 fois que t'es pas capable de répondre au probléme soulevé, tu blablates sans jamais de code.
    Pour l'instant tu m'as pas montré que t'étais un développeur.
    Pour moi t'es un troll, vas faire du tchat plutôt le parigo.
    Bonne journée.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 024
    Points
    2 024
    Par défaut
    Premièrement,
    je te prierai de garder tes insultes pour toi.

    Ensuite,
    Je remet tes choix en cause, ce que tu as écrit me parait être une sacrée usine à gaz.
    Je te donne des pistes, et t'invites indirectement à réfléchir par toi même sur des solutions possible. Mais pour cela, j'ai besoin que tu prennes du recule sur ton application, donne un peut plus d'explications sur le contexte. Malheureusement, tu sembles rester "La tête dans le guidon", coincé sur le petit détail que tu n'arrives pas à résoudre.
    Si tu espères un code source qu'il te suffira de copier / coller, ne compte pas sur moi. D'un point de vue pédagogique, c'est complètement pourri.

    Quand à une preuve de mes compétences de programmeur, je t'invite à regarder ceci:
    Calendar.zip
    C'est un calendrier, architecturé via le design pattern Observer, équipé de tracking d'erreurs. Je t'invite à le comparer avec le calendrier que tu as écris.

    Je t'invite également à te documenter sur les principes SOLID: https://fr.wikipedia.org/wiki/SOLID_(informatique)
    Dont le plus important d'entre eux, le SRP: https://en.wikipedia.org/wiki/Single...lity_principle
    Ainsi que la Loi de Demeter: https://fr.wikipedia.org/wiki/Loi_de_D%C3%A9m%C3%A9ter

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 845
    Points : 44 203
    Points
    44 203
    Par défaut
    tu blablates sans jamais de code.
    Nous ne sommes pas là pour faire ton travail en te donnant du code, mais pour t'aider.

    Mais j'ai pas besoin de ta stratégie, j'ai évoqué celle des vidéos.
    Dans ce cas, pourquoi viens-tu demander de l'aide si tu ne veux en faire qu'à ta tête et ne pas tenir compte de ce qu'on te propose ? Dans l'absolu pourquoi pas, c'est ton choix, peut-être y a t'il une raison pouvant d'ailleurs être exposée.

    Mais tu dis toi-même que pas grand-monde répond, et tu traites la seule personne qui t'as répondue de troll.

    Dans ce contexte, ça me surprendrait que tu obtienne de l'aide.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Application.ScreenUpdating n'interfère en rien en cours de développement ^^

    Si la ligne rg.Select plante, c'est que la feuille Accueil qui la contient n'est pas active. Il convient de la sélectionner AVANT de sélectionner une de ses plages.

    Normalement,on n'écrit pas du code applicatif dans une procédure événementielle. On l'écrit dans une ou plusieurs procédures d'un module standard et le code événementiel appelle la ou les procédures à la suite.

    On essaie, quand on est développeur VBA, de réaliser de petites procédures qui ne font qu'une chose, c'est-à-dire qui n'ont qu'une seule responsabilité.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 024
    Points
    2 024
    Par défaut
    @Pierre Fauconnier:
    Application.ScreenUpdating n'interfère en rien en cours de développement ^^
    Je me permet de ne pas être d'accord.
    J'ai précisé que ca interfère avec le débogage.
    A mon sens, le meilleur moyen de debugger la partie cosmétique d'une application, est encore d'avoir un retour visuel des changement apportés au fur et à mesure (en mode pas à pas).
    Ce que cette instruction interdit.

    En conclusion, elle interfère, à degrés variable (tout dépend de la quantité d'instructions ayant un impact sur les interface graphiques).
    Pour généraliser, il vaut mieux la mettre de coté, et n'y faire appel que lorsqu'on en a réellement besoin (en fin de développements).

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    En pas à pas, Application.ScreenUpdating = False est désactivée. Donc on s'en fout en débogage puisqu'elle n'interdit pas du tout le débogage "visuel".

    En conclusion, on la met dès le début du codage. Et en segmentant le code en petites procédures, on ne réanime pas le ScreenUpdating en fin de procédure, qui ne devrait être gelé/dégelé que dans les procédures événementielles, c'est-à-dire celles qui sont tout en bas de la pile d'appels, et jamais ailleurs.

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 024
    Points
    2 024
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    En pas à pas, Application.ScreenUpdating = False est désactivé.
    Vérifié et testé, autant pour moi.

    Pour le reste, hmm ..... j'ai plus de mal (je suis partisan d'utiliser une fonctionnalité seulement lorsqu'on en a besoin).
    Illustration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub Foo()
        Dim Data() As String
        Data = LireDonnees    '// lecture de données quelconque, on ne touche pas aux affichages
     
        Calculer Data    '// Calcul des données, on ne touche pas aux affichage
     
        Application.ScreenUpdating = False
        MiseAjour Data    '// Mise à jour des données, on touche aux affichage
        Application.ScreenUpdating = True
    End Sub
    (ce sera mon dernier mot sur ce point, inutile de dévier d'avantage du sujet initial).

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Ça veut dire qu'avec le code suivant, le screenupdating sera réactivé par Foo (et donc actif pour AutreProccedure et EncoreAutreProcedure) alors que ce n'est pas Foo qui l'a initialement désactivé, mais le code événementiel et que ainsi, on peut penser qu'il était intéressant qu'il reste à False tout le temps de l'exécution de la procédure événementielle => problème d'architecture de code en le mettant dans Foo comme tu l'a fait.

    Code vba : 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
    Private Sub Workbook_Open()
      Application.ScreenUpdating = False
      Foo
      AutreProcedure
      EncoreAutreProcedure
      Application.ScreenUpdating = False
    End Sub
     
    Public Sub Foo()
        Dim Data() As String
        Data = LireDonnees    '// lecture de données quelconque, on ne touche pas aux affichages
     
        Calculer Data    '// Calcul des données, on ne touche pas aux affichage
     
        Application.ScreenUpdating = False
        MiseAjour Data    '// Mise à jour des données, on touche aux affichage
        Application.ScreenUpdating = True
    End Sub

  14. #14
    Membre habitué
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable

    Informations forums :
    Inscription : Janvier 2022
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Bonjour à tous,

    Si la ligne rg.Select plante, c'est que la feuille Accueil qui la contient n'est pas active. Il convient de la sélectionner AVANT de sélectionner une de ses plages.
    Merci Pierre, çà fonctionne, en déplaçant wsAcceuil.activate
    J'avoue ne pas avoir assez réfléchi sur ce bug qui m'arrive souvent en suppression de ligne par exemple,
    mais quand on a pas les yeux en face des trous.
    L'image du cadenas reste affichée aprés 5 ouvertures, pourvu que çà dure.

    @chrtophe, j'ai contacté la personne de la vidéo, qui n'a pas souhaité vraiment m'aider, mais je vais l'informer au prochain problème discuté ici et en lien avec le code de sa vidéo.

    Bonne soirée à tous.

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

Discussions similaires

  1. [CS4] bouton d'ouverture fichier
    Par PAUL87 dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 24/12/2010, 14h38
  2. Bouton ouverture fichier Word
    Par Phill1140 dans le forum IHM
    Réponses: 11
    Dernier message: 03/02/2010, 14h50
  3. Réponses: 2
    Dernier message: 14/12/2004, 00h32
  4. inserer une image BMP dans un fichier rtf
    Par Alice9 dans le forum MFC
    Réponses: 17
    Dernier message: 06/07/2004, 11h31
  5. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 15h30

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