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 :

Selectionner la feuille précédemment activé [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 60
    Par défaut Selectionner la feuille précédemment activé
    Bonjour, à partir d'un bouton créé dans une feuille quelconque, je sélectionne une autre feuille. Là je veux effectuer un code en fonction de la feuille dont le bouton est. En gros, je clic sur un bouton dans une feuille X qui m'envoie sur une feuille Y. En fonctionne du "nom" de la feuille X j'effectue un code particulier.

    Si quelqu'un aurait le petit bout de code(en gros la ligne voir le paramètre) qui me manque pour pouvoir savoir sur quelle feuille je me situait avant se serait merveilleux.

  2. #2
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Crée une variable globale dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global NomFeuille as String
    Et en début de la macro sur clic du bouton, tu mettras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFeuille = Activesheet.name
    Tu pourras alors utiliser cette variable globale pour savoir "qui appelle"

    Note que, sauf à devoir rendre la main à l'utilisateur sur la feuille Y, il n'est que rarement utile ou nécessaire d'activer une feuille pour travailler dessus en VBA.

    Ton code pourrait probablement être optimisé
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 60
    Par défaut
    Génial, c'est parfait, c'est exactement ce que je voulais. Je ne connaissait le mot global pour créer des variables globales.

    Merci beaucoup !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 60
    Par défaut
    Ça fonctionne mais j'ai encore un petit problème.

    Dans ma feuille X j'ai un bouton. Lorsque j'appuie sur ce bouton, je récupère deux colonnes de ma feuille X que je met en forme dans ma feuille Y. Ensuite je fais une copie de ma feuille Y et j'affiche un histogramme des deux colonnes de valeurs (code dans le feuille X) dans cette même feuille (car c'est le même tableau que la feuille Y).

    Toujours dans le code du bouton de la feuille X, je créer un commandbutton "Retour" dans la feuille Y(2), je fait une copie du nom de la feuille X dans une variable globale, et lorsque j'appuie sur ce dernier je veux retourner sur la feuille X. C'est là que ma variable globale est censée intervenir.

    Car elle contient le nom de la Feuille X et je fais un sheet(MaVariableGlobale).select. Et là j'ai un message d'erreur 9, l'indice n'appartient pas à la sélection. En effet, un call MsgBox MaVariableGlobale ne m'affiche rien (alors que ça fonctionne bien sur la feuille X ou Y).

    Le code dans la feuille Y sert uniquement pour le bouton "Retour" lorsqu'il y a un clic sur ce dernier, donc je ne pense pas qu'une erreur puisse venir de là mais on ne sait jamais.

    Si vous pouviez m'aider e m'expliquant pourquoi ma variable globale "se vide" dans la feuille Y (2).

    ps : Je pourrait m'être le code mais les trois "pages" de codes font appels à des sub se trouvant dans d'autres pages. De plus mon code est sale (je programme comme un cochon) donc je ne préfère pas le mettre mais si ça peut vous aider, dites le moi et je le mettrais.

  5. #5
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il faut t'assurer que tu n'as pas, dans la procédure du bouton X, une variable qui a le même nom que ta variable.

    As-tu réalisé un débogage? (Débogage/Compilation du projet)
    Où et comment as-tu déclaré ta variable?
    As-tu dû réinitialiser ton code? Si oui, tu perds ta variable.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 60
    Par défaut
    Euh...J'utilise ma variable globale dans le code du bouton X mais je ne réinitialise rien, enfin je crois. Pour être sûr je vais mettre mon code :

    Voici le code dans mon module :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    Global FeuillePrecedente As String
     
    Sub Aller()
    FeuillePrecedente = ActiveSheet.Name
    End Sub
     
    Sub RetourFeuil()
    Sheets(FeuillePrecedente).Select
    End Sub
     
    Sub TabPrix()
     
    Dim ws As Worksheet
     
    Set ws = Sheets("Feuil3")
     
    If (FeuillePrecedente = "Feuil5") Then
     
    ws.Columns("Z").Delete
    ws.Columns("AA").Delete
     
    Sheets("Feuil5").Columns("Z").Copy ws.Range("AA1")
    Sheets("Feuil5").Columns("H").Copy
    ws.Range("Z1").PasteSpecial Paste:=xlPasteValues
    ws.Columns("Z:Z").EntireColumn.AutoFit
     
    ws.Range("Z1:Z7").ClearContents
    ws.Select
    ws.Range("AA50").End(xlUp).Select
     
    Do
    If IsEmpty(ActiveCell) Then
     
    ActiveCell.EntireRow.Delete
     
    End If
    ActiveCell.Offset(-1, 0).Select
    Loop Until ActiveCell.Row = 1
     
    Range("Z2:AA18").Sort Key1:=Range("AA2"), Order1:=xlDescending, header:=xlNo, Orientation:=xlTopToBottom
     
    Range("AA19").Value = Range("AA2").Value
    Range("AA2").EntireRow.Delete
     
    End If
     
    If (FeuillePrecedente = "Feuil6") Then
     
    ws.Columns("Z").Delete
    ws.Columns("AA").Delete
     
    Sheets("Feuil6").Columns("Z").Copy ws.Range("AA1")
    Sheets("Feuil6").Columns("H").Copy
    ws.Range("Z1").PasteSpecial Paste:=xlPasteValues
    ws.Columns("Z:Z").EntireColumn.AutoFit
     
    ws.Range("Z1:Z7").ClearContents
    ws.Select
    ws.Range("AA50").End(xlUp).Select
     
    Do
    If IsEmpty(ActiveCell) Then
     
    ActiveCell.EntireRow.Delete
     
    End If
    ActiveCell.Offset(-1, 0).Select
    Loop Until ActiveCell.Row = 1
     
    Range("Z2:AA18").Sort Key1:=Range("AA2"), Order1:=xlDescending, header:=xlNo, Orientation:=xlTopToBottom
     
    End If
     
    If (FeuillePrecedente = "Feuil9") Then
     
    ws.Columns("Z").Delete
    ws.Columns("AA").Delete
     
    Sheets("Feuil9").Columns("Z").Copy ws.Range("AA1")
    Sheets("Feuil9").Columns("H").Copy
    ws.Range("Z1").PasteSpecial Paste:=xlPasteValues
    ws.Columns("Z:Z").EntireColumn.AutoFit
     
    ws.Range("Z1:Z7").ClearContents
    ws.Select
    ws.Range("AA50").End(xlUp).Select
     
    Do
    If IsEmpty(ActiveCell) Then
     
    ActiveCell.EntireRow.Delete
     
    End If
    ActiveCell.Offset(-1, 0).Select
    Loop Until ActiveCell.Row = 1
     
    Range("Z2:AA18").Sort Key1:=Range("AA2"), Order1:=xlDescending, header:=xlNo, Orientation:=xlTopToBottom
     
    End If
     
    If (FeuillePrecedente = "Feuil10") Then
     
    ws.Columns("Z").Delete
    ws.Columns("AA").Delete
     
    Sheets("Feuil10").Columns("Z").Copy ws.Range("AA1")
    Sheets("Feuil10").Columns("H").Copy
    ws.Range("Z1").PasteSpecial Paste:=xlPasteValues
    ws.Columns("Z:Z").EntireColumn.AutoFit
     
    ws.Range("Z1:Z7").ClearContents
    ws.Select
    ws.Range("AA50").End(xlUp).Select
     
    Do
    If IsEmpty(ActiveCell) Then
     
    ActiveCell.EntireRow.Delete
     
    End If
    ActiveCell.Offset(-1, 0).Select
    Loop Until ActiveCell.Row = 1
     
    Range("Z2:AA18").Sort Key1:=Range("AA2"), Order1:=xlDescending, header:=xlNo, Orientation:=xlTopToBottom
     
    End If
     
    End Sub
    Voici le code de la feuille 5 (feuille X)(C'est le même pour les feuilles 6, 9 et 10) :

    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
     
    Private Sub BoutonX_Click()
     
    Aller
     
    TabPrix
     
    'Sheets("Feuil3").Select
    Sheets("Feuil3").Copy before:=Sheets(1)
     
    Dim SC As Excel.ChartObject
     
    Set SC = ActiveSheet.ChartObjects.Add(10, 10, 900, 500)
     
    SC.Chart.SeriesCollection.NewSeries
     
    SC.Chart.Axes(xlCategory, xlPrimary).TickLabels.Orientation = -45
    SC.Chart.SeriesCollection(1).XValues = "='Feuil3'!R2C26:R18C26" 
    SC.Chart.SeriesCollection(1).Values = "='Feuil3'!R2C27:R18C27"
    SC.Chart.ApplyDataLabels ShowValue:=True
    SC.Chart.SeriesCollection(1).Name = "=""Euros"""
     
    With SC.Chart
        .HasAxis(xlCategory, xlPrimary) = True
        .HasAxis(xlValue, xlPrimary) = True
    End With
     
    SC.Chart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
     
    With SC.Chart
        .Axes(xlValue, xlPrimary).TickLabels.NumberFormat = "#,##0 $"
    End With
     
    InsererCommandButton3
     
    ActiveSheet.Range("A1").Select
     
    End Sub
    Voici le code de ma feuille3 (feuille Y) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Retour_click()
     
    EffaceChart
    EffaceCommandButton2
     
    SendKeys "{enter}"
    ActiveSheet.Delete
     
    Call MsgBox(FeuillePrecedente) 'Je ne retrouve pas "Feuil5" d'afficher dans la MsgBox
     
    RetourFeuil 'Erreur 9 : Indice en dehors de la sélection car = ""
     
    End Sub
    J'espère que cela va vous aider et vous permettre de m'aider.

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

Discussions similaires

  1. sql sur une feuille excel active
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2008, 18h26
  2. [vba] problemes selectionner ma feuille
    Par didi61 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/01/2008, 19h02
  3. ecrire dans une feuille non active d'excel
    Par baboo50 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/08/2007, 11h37
  4. Facile: selectionner 2 feuilles
    Par florent149 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/08/2006, 10h17
  5. [VBA-E]Selectionner une feuille....
    Par LouBoulpi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/02/2006, 04h47

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