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 :

Bug Macro avec Option Explicit


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut Bug Macro avec Option Explicit
    Bonsoir a tous,
    Depuis l'ajout de Option explicit la macro bug sinon elle fonctionne bien.
    Variable?
    Merci de vous éventuels retours

    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
    Option explicit
    Sub PageMenu()
    '
    ' PageMenu Macro
    ' Macro enregistrée par ***
    Dim nombre As Integer
     nombre = ActiveWorkbook.Sheets.Count
     Application.ScreenUpdating = False
     For I = 1 To nombre
     Worksheets(I).Unprotect Password:="blabla"
     Next I
       Application.ScreenUpdating = False
      AfficherOnglets
       Sheets("Janvier 2014").Select
      Range("A1").Select
       End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Option Explicit te force à déclarer toutes les variables utilisées.

    Exemple ton I n'est pas declaré

  3. #3
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Bonsoir mercatog,
    Exactement.
    Je fais quoi stp?
    Bien cordialement

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Tu ajoutes:

    dans une nouvelle ligne avant ta ligne qui utilise ton i. Personnellement, j'essaie de mettre mes déclarations de variables dans un bloc de lignes immédiatement après la ligne sub().

    C'est le même principe pour toutes tes variables.

  5. #5
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Bonjour clementmarcotte,
    Merci Merci ça fonctionne bien.
    Bon WE à toi
    Bien cordialement

  6. #6
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut Bug dans ce module également
    Bonjour à tous,
    Bug à la ligne ModeRecalcul
    Merci pour vos éventuels retours
    Cordialement


    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
    Option Explicit
    Sub SuppColonnesVides()
    ActiveSheet.Unprotect
    ModeRecalcul = Application.Calculation
    ' Réglage du recalcul sur mode manuel
    Application.Calculation = xlCalculationManual
    With ActiveSheet.UsedRange
    dercol = .Column + .Columns.Count - 1
    End With
    Application.ScreenUpdating = False
    For c = dercol To 1 Step -1
    If Application.CountA(Columns(c)) = 0 Then Columns(c).Delete
    Next c
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
    Scenarios:=True
    Application.Calculation = ModeRecalcul
     
    End Sub

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est la même réponse que celle donnée par Mercatog
    Option Explicit te force à déclarer toutes les variables utilisées.
    Exemple ton I n'est pas declaré
    et répétée par Clément
    dans une nouvelle ligne avant ta ligne qui utilise ton i. Personnellement, j'essaie de mettre mes déclarations de variables dans un bloc de lignes immédiatement après la ligne sub().
    C'est le même principe pour toutes tes variables.
    L'instruction Option Explicit t'oblige à déclarer toutes tes variables donc tu dois déclarer la variable ModeRecalcul avant de l'utiliser et comme l'a suggéré Clément, déclare tes variables en début de procédure.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour abel, Philippe, le forum
    sinon je pense que "ModeRecalcul = Application.Calculation" dans le contexte est inutile

    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
    Sub SuppColonnesVides()
    'j'ai estimé que tu as déclaré tes variables(dercol,c)
    ActiveSheet.Unprotect
    Application.Calculation = xlCalculationManual
    With ActiveSheet
      dercol = .Cells(1, .Columns.Count).End(xlToLeft).Column 'si ta plage commence en ligne 1
    End With
    Application.ScreenUpdating = False
    For c = dercol To 1 Step -1
      If Application.CountA(Columns(c)) = 0 Then Columns(c).Delete
    Next c
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
    Scenarios:=True
    Application.Calculation = xlCalculationAutomatic
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour Dominique,
    sinon je pense que "ModeRecalcul = Application.Calculation" dans le contexte est inutile
    Le fait de sauver la propriété du mode de recalcul avant de la mettre en mode manuel permet de restituer le même mode après avoir terminé le process. Ainsi l'utilisateur retrouve le mode de recalcule tel qu'il avait souhaité.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    oui Philippe, je suis d'accord et j'ai peut-être tort de penser que très souvent, quand on passe en mode manuel, c'est qu'on était en automatique

    et j'en ai profité pour donner à Abel une autre façon de voir le numéro de la dernière colonne car j'ai du mal à comprendre sa propre ligne, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .......
    dercol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    .........
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dercol = .Column + .Columns.Count - 1
    mais j'ai encore là, peut-être, mal cerné le problème

    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Citation Envoyé par casefayere Voir le message
    oui Philippe, je suis d'accord et j'ai peut-être tort de penser que très souvent, quand on passe en mode manuel, c'est qu'on était en automatique

    et j'en ai profité pour donner à Abel une autre façon de voir le numéro de la dernière colonne car j'ai du mal à comprendre sa propre ligne, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .......
    dercol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    .........
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dercol = .Column + .Columns.Count - 1
    mais j'ai encore là, peut-être, mal cerné le problème

    Bonne journée
    Bonjour casefayere,
    Non ça ne fonctionne pas.
    J'ai 16 programmes de 9 modules chacun, qui fonctionnent parfaitement. Mais je veux ajouter Option Explicit a chacun pour mon "savoir", car je considère que nous somme des éternel apprentis!!!
    Bien cordialement à toi

  12. #12
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Non ça ne fonctionne pas.
    Qu'est-ce qui ne fonctionne pas ? de plus, je ne vois pas le rapport entre ma proposition et ce que tu réponds
    J'ai 16 programmes de 9 modules chacun, qui fonctionnent parfaitement. Mais je veux ajouter Option Explicit a chacun pour mon "savoir", car je considère que nous somme des éternel apprentis!!!
    Bien cordialement à toi
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour Dominique,
    je ne vois pas le rapport entre ma proposition et ce que tu réponds
    Je partage ton questionnement.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  14. #14
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Merci Philippe, ça me rassure, j'ai envie de dire à Abel, ne pas oublier de cocher la "déclaration des variables obligatoire" dans les options de l'éditeur

    A Abel, quand tu dis
    j'ai 16 programmes de 9 modules chacun, qui fonctionnent parfaitement
    dois-je traduire par
    j'ai 16 modules de 9 procédures chacun, qui fonctionnent parfaitement
    ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  15. #15
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Citation Envoyé par casefayere Voir le message
    Merci Philippe, ça me rassure, j'ai envie de dire à Abel, ne pas oublier de cocher la "déclaration des variables obligatoire" dans les options de l'éditeur

    A Abel, quand tu dis dois-je traduire par ?
    Bonjour casefayere,
    Oui la "déclaration des variables obligatoire" dans les options de l'éditeur est bien cochée.
    Je vais essayer de gratter par moi-même (pas facile pour vous sans le fichier) et je reviens sur le forum si "catastrophe"!!!
    Veuillez m'excusez pour tout le dérangement occasionné!
    Bien cordialement à vous tous et plus particulièrement à casefayere

  16. #16
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Je vais essayer de gratter par moi-même (pas facile pour vous sans le fichier) et je reviens sur le forum si "catastrophe"!!!
    A ce stade, tu pouvais envoyer une version edulcorée du fichier en version "xls" ou en compressé, donc avec tes macros (surtout pas en xlsx)

    Veuillez m'excusez pour tout le dérangement occasionné!
    Si tu nous déranges, on n'est pas obligé de répondre alors rassures-toi
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  17. #17
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Voilà les amis.
    Après avoir fait mes 7 kms de marche obligatoire suite à une intervention à cœur ouvert de 10 heures. J'ai croisé mes potes de marche sans les saluer!!! Tellement j'étais dans mon truc.
    En revenant mes oui quel CON!!! Bon je n'ai pas ajouté "et je m'y connais"!!! Ah! il ne faut pas vieillir les neurones commencent à faire défaut!!!
    Merci à vous tous et plus particulièrement à toi casefayere .
    Bonne fin de soirée et bon WE

    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
    Option Explicit
    Sub SuppColonnesVides()
    Dim ModeRecalcul As Integer
    Dim Dercol As Integer
    Dim C As Integer
     
    ActiveSheet.Unprotect
    ModeRecalcul = Application.Calculation
    ' Réglage du recalcul sur mode manuel
    Application.Calculation = xlCalculationManual
    With ActiveSheet.UsedRange
    Dercol = .Column + .Columns.Count - 1
    End With
    Application.ScreenUpdating = False
    For C = Dercol To 1 Step -1
    If Application.CountA(Columns(C)) = 0 Then Columns(C).Delete
    Next C
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
    Scenarios:=True
    Application.Calculation = ModeRecalcul
     
    End Sub
    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
    Option Explicit
    Sub PageMenu()
    '
    ' PageMenu Macro
    ' Macro enregistrée par ***
    Dim nombre As Integer
     nombre = ActiveWorkbook.Sheets.Count
     Application.ScreenUpdating = False
     Dim i As Integer
     For i = 1 To nombre
     Worksheets(i).Unprotect Password:="blabla"
     Next i
       Application.ScreenUpdating = False
      AfficherOnglets
       Sheets("Janvier 2014").Select
      Range("A1").Select
       End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Sub RenommerFeuilles()
    Dim Sh As Worksheet
        For Each Sh In Worksheets
            Sh.Name = Replace(Sh.Name, "2014", "2015")
        Next

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

Discussions similaires

  1. jQuery UI Tabs : bug avec option FX
    Par h4mzt3r dans le forum jQuery
    Réponses: 2
    Dernier message: 07/02/2012, 10h26
  2. [VI-2003] création png avec option par macro
    Par Ju1.0 dans le forum Visio
    Réponses: 11
    Dernier message: 25/11/2010, 14h32
  3. Problème avec "option explicit"
    Par tribaleur dans le forum ASP
    Réponses: 3
    Dernier message: 01/06/2006, 10h46
  4. Utilisation de Option explicit
    Par Perihan dans le forum ASP
    Réponses: 5
    Dernier message: 29/10/2003, 11h43
  5. Bug Xerces2_1_0 avec C++ et Linux ??
    Par _marie_ dans le forum XML
    Réponses: 2
    Dernier message: 24/09/2003, 07h49

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