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 :

Sélectionner une feuille avec variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut Sélectionner une feuille avec variable
    Bonjour,

    C'est tout bête mais j'essaie de modifier ma macro pour qu'elle puisse traiter une liste d'onglets et ca bug :

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Range("G8:G22").Select      'plage de données 
     
        For Each Cell In Selection
        numCC = Cell.Value
     
    MsgBox (numCC) 'ca me rapporte bien ma donnée qui correspond au nom d'un onglet (exemple : 1421)
     
        Sheets(numCC).Select   'ca bug ici
        .....
    Merci de votre aide

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

    Il vous faut déclarer vos variables.

    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 EssaiSelect()
     
    Dim Cell As Range
    Dim NumCC As String
     
        With ActiveSheet
           .Range("G8:G22").Select      'plage de données
     
        For Each Cell In Selection
            NumCC = Cell.Value
            MsgBox (NumCC) 'ca me rapporte bien ma donnée qui correspond au nom d'un onglet (exemple : 1421)
            Sheets(NumCC).Select   'ca bug plus ici
     
        Next Cell
     
        End With
     
    End Sub
    Nb : Il est rarement utile de sélectionner un onglet. Regardez plutôt la façon de travailler avec un Set Sh = Sheets(NumCC) où Sh est déclaré comme Worksheet par exemple.

    Cordialement.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Tout juste :-) j'ai tendance à oublier de déclarer mes variables et comme souvent ça fonctionne sans je ne pense pas à ca quand ca bug....
    Par contre je n'ai pas bien saisi l'intérêt du Set Sh et comment l'utiliser dans mon cas car j'ai besoin de sélectionner les onglets pour faire ma mise en forme et créer le pdf de chaque onglets par la suite.

    Voici la macro :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub MEF_et_génération_PDF_pour_reporting_DA()
    '
    '
     
    Application.ScreenUpdating = False
     
        Dim Cell As Range
        Dim NumCC As String
        Dim CheminRep As String
        Dim MoisAnnée As String
     
        Sheets("INDEX").Select
     
        CheminRep = Range("G2").Value
        MoisAnnée = Range("G3").Value
     
        Range("G8:G22").Select 'plage de données des CC
     
        For Each Cell In Selection
        NumCC = Cell.Value
     
     
    'MsgBox (NumCC)
     
     
        Sheets(NumCC).Select
     
        Range("B3").Select
        ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=2 'ouvre les regroupements de colonnes
        Columns("Y:AA").EntireColumn.Hidden = True
        ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1 'ferme les regroupements de colonnes
        Columns("Y:AA").EntireColumn.Hidden = False
        Range("B3").Select
     
        ActiveSheet.Outline.ShowLevels RowLevels:=2 'ouvre les regroupements de lignes
        Rows("77:80").EntireRow.Hidden = True
        ActiveSheet.Outline.ShowLevels RowLevels:=1  'ferme les regroupements de lignes
        Rows("77:80").EntireRow.Hidden = False
        Range("B3").Select
     
        Columns("Z:Z").EntireColumn.AutoFit
        Rows("81:81").EntireRow.AutoFit
     
        Range("B3").Select
     
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminRep & "\" & NumCC & "_" & MoisAnnée & "_Suivi Frais " & ".pdf"
     
        Range("B3").Select
     
        ActiveSheet.Outline.ShowLevels RowLevels:=2 'ré-ouvre les regroupements de lignes
     
        Next
     
        MsgBox ("Les fichiers pdf sont créés dans le répertoire : " & CheminRep)
     
     
     
    Application.ScreenUpdating = False
     
    End Sub

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

    Un exemple avec votre code sans utiliser Select. Le temps de traitement est-il plus rapide ?

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Option Explicit
     
    Sub MEF_et_génération_PDF_pour_reporting_DA()
     
    Dim CheminRep As String
    Dim MoisAnnee As String
     
    Dim AireDesOnglets As Range
    Dim Cell As Range
     
    Dim ShEnCours As Worksheet
     
            Application.ScreenUpdating = False
     
            With Sheets("INDEX")
                 CheminRep = .Range("G2").Value
                 MoisAnnee = .Range("G3").Value
                 Set AireDesOnglets = .Range("G8:G22") 'plage de données des CC
              '  Set AireDesOnglets = .Range("G8:G10") ' Essai sur 3 onglets
            End With
     
            For Each Cell In AireDesOnglets
     
                Set ShEnCours = Sheets(Cell.Value)
     
                With ShEnCours
                     .Outline.ShowLevels RowLevels:=0, ColumnLevels:=2 'ouvre les regroupements de colonnes
                     .Columns("Y:AA").EntireColumn.Hidden = True
                     .Outline.ShowLevels RowLevels:=0, ColumnLevels:=1 'ferme les regroupements de colonnes
                     .Columns("Y:AA").EntireColumn.Hidden = False
                     .Outline.ShowLevels RowLevels:=2 'ouvre les regroupements de lignes
                     .Rows("77:80").EntireRow.Hidden = True
                     .Outline.ShowLevels RowLevels:=1 'ferme les regroupements de lignes
                     .Rows("77:80").EntireRow.Hidden = False
                     .Columns("Z:Z").EntireColumn.AutoFit
                     .Rows("81:81").EntireRow.AutoFit
                     .ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminRep & "\" & Cell & "_" & MoisAnnee & "_Suivi Frais" & ".pdf"
                     .Outline.ShowLevels RowLevels:=2 'ré-ouvre les regroupements de lignes
               End With
     
               Set ShEnCours = Nothing
     
            Next
     
            Set AireDesOnglets = Nothing
     
            Application.ScreenUpdating = False
     
            MsgBox "Les fichiers pdf sont créés dans le répertoire : " & Chr(10) & Chr(10) & CheminRep, vbInformation
     
    End Sub
    Nb : Pour plus de lisibilité, utilisez les balises de code (# dans le menu) pour encadrer votre code.

    Cordialement.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Merci Eric, désolé pour les # je ne savais pas..

    J'ai testé ce matin et ca bug à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set ShEnCours = Sheets(Cell.Value)
    merci pour ton aide

    a+

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

    Quel message as-tu ?
    As tu bien respecté la syntaxe ?
    Les noms dans G8:G22 correspondent-ils tous à des onglets ?

    Sinon, mets ta procédure complète en ligne.

    Cordialement.
    Dernière modification par AlainTech ; 19/05/2015 à 08h34. Motif: Suppression de la citation inutile

  7. #7
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Le message est le suivant :
    Erreur d'execution 9
    L'indice n'appartient pas à la sélection ....
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub MEF_et_génération_PDF_pour_reporting_DA_option_explicit()
     
    Dim CheminRep As String
    Dim MoisAnnee As String
     
    Dim AireDesOnglets As Range
    Dim Cell As Range
     
    Dim ShEnCours As Worksheet
     
            Application.ScreenUpdating = False
     
            With Sheets("INDEX")
                 CheminRep = .Range("G2").Value
                 MoisAnnee = .Range("G3").Value
                 Set AireDesOnglets = .Range("G8:G22") 'plage de données des CC
              '  Set AireDesOnglets = .Range("G8:G10") ' Essai sur 3 onglets
            End With
     
            For Each Cell In AireDesOnglets
     
                Set ShEnCours = Sheets(Cell.Value)
     
                With ShEnCours
                     .Outline.ShowLevels RowLevels:=0, ColumnLevels:=2 'ouvre les regroupements de colonnes
                     .Columns("Y:AA").EntireColumn.Hidden = True
                     .Outline.ShowLevels RowLevels:=0, ColumnLevels:=1 'ferme les regroupements de colonnes
                     .Columns("Y:AA").EntireColumn.Hidden = False
                     .Outline.ShowLevels RowLevels:=2 'ouvre les regroupements de lignes
                     .Rows("77:80").EntireRow.Hidden = True
                     .Outline.ShowLevels RowLevels:=1 'ferme les regroupements de lignes
                     .Rows("77:80").EntireRow.Hidden = False
                     .Columns("Z:Z").EntireColumn.AutoFit
                     .Rows("81:81").EntireRow.AutoFit
                     .ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminRep & "\" & Cell & "_" & MoisAnnee & "_Suivi Frais" & ".pdf"
                     .Outline.ShowLevels RowLevels:=2 'ré-ouvre les regroupements de lignes
               End With
     
               Set ShEnCours = Nothing
     
            Next
     
            Set AireDesOnglets = Nothing
     
            Application.ScreenUpdating = False
     
            MsgBox "Les fichiers pdf sont créés dans le répertoire : " & Chr(10) & Chr(10) & CheminRep, vbInformation
     
    End Sub

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour,


    combien as tu de classeur excel ouvert ?

    avec ton code :

    tu oublie de préciser le classeur concerné si ta feuille est dans le classeur contenant ta macro utilise ThisWorkBook ...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par valérieF Voir le message
    Le message est le suivant :
    Erreur d'execution 9
    L'indice n'appartient pas à la sélection ....
    Remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set AireDesOnglets = .Range("G8:G22") 'plage de données des CC
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set AireDesOnglets = Sheets("INDEX").Range("G8:G22") 'plage de données des CC
    Cordialement.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Non ca ne fonctionne toujours pas...Ca bug toujours au même endroit
    Cell prend bien la valeur 1421 mais ne rentre pas dans ShEnCours = Sheets(Cell.Value)

    Estce que cela n'aurait pas à voir avec le pb que j'avais initialement dans mon code (moins optimisé) où j'ai dû définir NumCC comme String pour que cela fonctionne. Or dans ce nouveau code Cell est défini en Range....

    Je joins un fichier basic avec qqles onglets pour tester si besoin.

    a+

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    c'est quoi 1421 ? tu as une feuille nommée 1421 ?

  12. #12
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    désolé je n'arrive pas à joindre mon fichier.... j'ai peut être un pb sur mon poste

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par valérieF Voir le message
    désolé je n'arrive pas à joindre mon fichier.... j'ai peut être un pb sur mon poste
    pas besoin de fichier réponds plutôt aux questions

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par valérieF Voir le message
    désolé je n'arrive pas à joindre mon fichier.... j'ai peut être un pb sur mon poste
    Non.

    1421 n'est pas pris comme une valeur alpha :

    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set ShEnCours = Sheets(Cstr(Cell.Value))

    Au cas où cela ne marcherait toujours pas et si les noms d'onglets sont des nombres, mets un ' devant chaque nombre pour les transformer en alpha.


    Cordialement

  15. #15
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    bbil, oui 1421 est un nom d'onglet, je ne t'ai pas répondu car je n'avais pas vu ta question :-)


    Eric, oui!!! super ca ne bug plus. Par contre je testerai la macro entière au bureau demain car je n'ai pas mon pc de boulot avec moi ce soir... Pour plusieurs raisons je ne souhaite pas modifier les noms d'onglets mais un truc m'intrigue : t'es sur qu'il est possible de mettre un ' en début de nom sur un onglet? Je n'y arrive pas...
    Je te donnerai des news demain et si tout fonctionnne je te dirais si le traitement de la macro optimisé est plus rapide que ma macro de novice :-) mais le code Set ... nothing je ne comprends pas bien... faut que je cherche un peu de doc.

    a+

  16. #16
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, également qqch qui fait partie des bases : le CodeName ou
    Cela permet de déplacer les feuilles, de renommer les feuilles sans avoir à retoucher au code VBA ( si ce dernier prend en compte le CodeName )

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par valérieF Voir le message
    mais un truc m'intrigue : t'es sur qu'il est possible de mettre un ' en début de nom sur un onglet? Je n'y arrive pas...
    Voui. Il faut simplement taper l'apostrophe ' (correspondant au chiffre 4 sur la deuxième ligne du clavier) au tout début et taper les chiffres, ou insérer l'apostrophe avant le premier chiffre si ton nombre est déjà écrit.

    Je te donnerai des news demain et si tout fonctionnne je te dirais si le traitement de la macro optimisé est plus rapide que ma macro de novice :-) mais le code Set ... nothing je ne comprends pas bien... faut que je cherche un peu de doc.
    En t'envoyant cette macro, je voulais seulement te montrer que tu pouvais te passer des Select.

    Cordialement.

  18. #18
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Avril 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    La macro fonctionne Eric. Par contre ce n'est pas plus rapide. Je pensais que le temps de traitement serait meilleur.
    Et je t'assure que j'ai beau essayer de mettre un ' au début du nom d'un onglet et je n'y arrive pas !!!!!
    Merci en tout cas, je vais essayer de faire ma prochaine macro, qui est un peu plus compliquée avec mes déclarations de variable et utilisation des objets.

    a+

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

Discussions similaires

  1. [XL-2007] Sélectionner une feuille (variable) via une Commandbar
    Par antha dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/05/2014, 17h30
  2. [XL-2007] Appel nom interne d'une feuille avec variable
    Par friout dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2011, 13h52
  3. [XL-2007] Rechercher et copier une colonne sans sélectionner la feuille (avec find)
    Par Danieldu54 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/07/2011, 21h06
  4. Sélectionner une cellule avec une variable
    Par John81 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2008, 19h05
  5. [VBA] Copie d'une feuille (avec graphique)
    Par ed_dexia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2005, 10h56

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