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 :

Un seul code pour toutes les feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Un seul code pour toutes les feuilles
    Bonjour,

    Actuellement j'utilise ce code que j'ai copié dans chacune des feuilles de calcul. J'aimerai avoir un seul code, sous la forme d'un module, qui me sert pour toutes les feuilles. Les feuilles commençant par un "L" sont activées à partir d'un UF (UFEngt) et d'un Combo (CmbListCred).
    Pouvez-vous m'apporter votre aide s'il vous plait ? Merci par avance

    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
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    'On Error GoTo fin
     
    If Not Intersect([A12:A39], Target) Is Nothing Then
        Dim FNew As Worksheet, Wb As Workbook, Sh As Worksheet
        Const Cible As String = "F24"
        Set Wb = ThisWorkbook
     
    On Error Resume Next
        Set FNew = Wb.Worksheets(Cible)
    On Error GoTo fin
        If Not FNew Is Nothing Then
            FNew.Activate
            FNew.Visible = True
        Else
            GoTo fin
        End If
     
    ' on masque les feuilles
        For Each Sh In Wb.Worksheets
            If FNew.name <> Cible Then
            If FNew.name <> "L24" Then
               FNew.Visible = xlSheetVeryHidden
            End If
        End If
        Next Sh
     
        FNew.Cells((Target.Value - 1) * 41 + 2, 3).Select
        'Application.GoTo reference:=
        End If
     
        FNew.Rows("1:1185").Hidden = True
            FNew.Range(FNew.Cells((Target.Value - 1) * 41 + 2, 3), FNew.Cells((Target.Value - 1) * 41 + 1 + 38, 3)).EntireRow.Hidden = False
            FNew.Cells((Target.Value - 1) * 41 + 2, 3).Select
    fin:
        Set FNew = Nothing: Set Wb = Nothing: Set Sh = Nothing
     
     
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour.

    Il aurait fallu commencer directement dans le module ThisWorkbook

    Ouvrir donc le code de ce module puis au dessus à la place de General sélectionner par la flèche WorkBook
    ce qui donne pour code l'évènement Workbook_Open() (si pas déjà créé)
    puis à droite à la place d'Open sélectionner SheetBeforeDoubleClick
    qui a juste comme paramètre supplémentaire Sh concernant la feuille …

    Ensuite restera à y recopier le code puis à effacer l'évènement dans chacune des feuilles …
    (Effacer aussi l'Open si pas déjà utilisé)



    _______________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour Marc-L et merci pour votre réponse. Mais j'ai du mal à comprendre comment le code pourra faire le lien entre la feuille choisie et la fiche qui y est liée.
    Par exemple : Je choisis la feuille L343, comment se fait le lien avec la fiche F343, au moment du double-click ?

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Justement via Sh représentant donc la feuille déclenchant l'évènement … (Sh.Name par exemple)


    ________________________________________________________
    A celle qui dit que les hommes sont tous pareils, lui répondre qu'il ne fallait pas tous les essayer !

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Ah ok, je n'avais pas compris.
    Merci

    J'ai fait ce code mais ça ne fonctionne pas. Pouvez-vous me dire ce que j'ai mal fait ? Merci par avance

    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
     
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    'On Error GoTo fin
     
    If Not Intersect([A12:A39], Target) Is Nothing Then
        Dim FNew As Worksheet, Wb As Workbook
        Dim NumLig As String
        NumLig = Cells("D5").Value
        Const Cible As String = ("F" & NumLig)
        Set Wb = ThisWorkbook
    Set Sh = ThisWorkbook.Sheets("L" & NumLig)
    Sh.Activate
     
    On Error Resume Next
        Set FNew = Wb.Worksheets(Cible)
    On Error GoTo fin
        If Not FNew Is Nothing Then
            FNew.Activate
            FNew.Visible = True
        Else
            GoTo fin
        End If
     
    ' on masque les feuilles
        For Each Sh In Wb.Worksheets
            If FNew.name <> Cible Then
            If FNew.name <> ("L" & NumLig) Then
               FNew.Visible = xlSheetVeryHidden
            End If
        End If
        Next Sh
     
        FNew.Cells((Target.Value - 1) * 41 + 2, 3).Select
        'Application.GoTo reference:=
        End If
     
        FNew.Rows("1:1185").Hidden = True
            FNew.Range(FNew.Cells((Target.Value - 1) * 41 + 2, 3), FNew.Cells((Target.Value - 1) * 41 + 1 + 38, 3)).EntireRow.Hidden = False
            FNew.Cells((Target.Value - 1) * 41 + 2, 3).Select
    fin:
        Set FNew = Nothing: Set Wb = Nothing: Set Sh = Nothing
     
     
    End Sub

  6. #6
    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
    Bonjour nec14

    tu travaille pas a l'economie toi

    regarde ca
    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
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
        If Not Intersect([A12:A39], Target) Is Nothing Then
            Dim FNew As Object, Wb As Workbook, NumLig As Variant
            Dim cible As String    'je change la constante en variable string
            NumLig = Sheets(1).Range("D5")
            cible = ("F" & NumLig)
            Set Wb = ThisWorkbook
     
            'ici tu active le sheets "L" et numlig pourquoi puisque tu va ensuite avtiver l'autre
            Set Sh = Wb.Sheets("L" & NumLig)
            Sh.Activate
            'et ici maintenant tu active le sheets "F" et numlig
            'heu..... a quoi ca sert??????
     
            ' on masque les feuilles
            For Each Sh In Wb.Worksheets
                If Sh.Name <> cible And Sh.Name <> ("L" & NumLig) Then Sh.Visible = xlSheetVeryHidden
                If Sh.Name = cible Then
                    Set FNew = Wb.Sheets(cible): FNew.Activate: FNew.Visible = True
                Else: Exit Sub
                End If
            Next Sh
    Tu vois ce que je veux dire ??,
    Au plaisir

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour Patrick et merci.

    Effectivement ton code est beaucoup plus net que le mien. J'essaie de faire au mieux mais j'ai encore beaucoup à apprendre.

    Souvent j'essaie d'adapter des codes trouvés ici et là ou des codes qui me sont proposés sur le forum, et ce n'est pas toujours facile d'être économe, mais je me soigne, je vais y arriver.

    Les feuilles commençant par "F" sont liées à celles commençant par "L". Les feuilles "F" sont activées lors d'un double-click dans une cellule de "L". Les tableaux en "L" sont des récapitulatifs des tableaux plus détaillés de "F".

    Suis-je clair dans mes explications ? ?

  8. #8
    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
    Ok pour ca

    si je comprends bien tu doubleclick dans le sheets(L125)par exemple ca t'active le f125

    en gros c'est a peu pres ca ?????

  9. #9
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Oui c'est ça. De plus, dans la F125 par exemple il y a 28 tableaux les uns en dessous des autres. Dans L125, il y a donc un tableau où se trouve des chiffres de 1 à 28. Si je double-clic sur 5, c'est le tableau 5 qui apparait et tous les autres sont cachés.
    Désolé pour la réponse tardive.

    Bonjour à tous,

    Je coince toujours avec mon code. J'ai écrit le code ci-dessous mais j'ai un message d'erreur à la ligne en rouge. "L'indice n'appartient pas à la sélection" et lorsque l'on passe sur la ligne de code la valeur de NumLig = vide alors qu'il y a bien une valeur dans D5.

    Merci pour votre aide

    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
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    
    If Not Intersect([A12:A39], Target) Is Nothing Then
    
        Dim FNew As Object, Wb As Workbook, NumLig As Variant
        Dim Cible As String
        
        NumLig = Sheets(1).Range("D5")
        Cible = ("F" & NumLig)
        Set Wb = ThisWorkbook
        
        'Ici on active la feuille "L" et NumLig (n° de ligne) et ensuite on active la feuille "F"
        
        Set Sh = Wb.Sheets("L" & NumLig) 
        Sh.Activate
        Sheets("F" & NumLig).Activate
        'on masque les feuilles
        
        For Each Sh In Wb.Worksheets
            If Sh.name <> Cible And Sh.name <> ("L" & NumLig) Then Sh.Visible = xlSheetVeryHidden
                If Sh.name = Cible Then
                    Set FNew = Wb.Sheets(Cible): FNew.Activate: FNew.Visible = True
                
                Else: Exit Sub
                End If
                Next Sh
                
                FNew.Cells((Target.Value - 1) * 41 + 2, 2).Select
                End If
                FNew.Rows("1:1185").Hidden = True
                    FNew.Range(FNew.Cells((Target.Value - 1) * 41 + 2, 3), FNew.Cells((Target.Value - 1) * 41 + 1 + 38, 3)).EntireRow.Hidden = False
                    FNew.Cells((Target.Value - 1) * 41 + 2, 3).Select
    fin:
                Set FNew = Nothing: Set Wb = Nothing: Set Sh = Nothing
                
    End Sub

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Normal car cela veut dire que la feuille n'existe pas, à vérifier donc avant de déclarer la variable objet …


    __________________________________________________________________________________
    Quand un homme dit des obscénités à une femme, c'est un pervers. Quand une femme dit des obscénités à un homme, c'est 3€95 la minute …

  11. #11
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour Marc-L

    Pourtant la feuille existe puisque je travaille dessus.

  12. #12
    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
    bonjour
    ou lala
    alors je réhitere ma remarque ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set Sh = Wb.Sheets("L" & NumLig) 
        Sh.Activate
        Sheets("F" & NumLig).Activate
        'on masque les feuilles
    'suite du code .......
    a quoi te sert d'activer un sheet apres avoir recuperer une valeur pour activer tout de suite apres un autre
    puisque cible(="F" & numlig) est différent de "L "et numlig

    franchement plus ca va plus tu t'enfonce ca deviens difficile de te suivre
    a tu reellement besoins de ca
    Au plaisir

  13. #13
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour Patrick et merci pour ta patience,

    Je vais expliquer la procédure. Je choisis un tableau à partir d'UF et d'une Combo. Par exemple je choisis L24, (j'ai une trentaine de tableau, L343, L2033, etc.) alors la feuille L24 s'affiche. La feuille L24 est un récapitulatif des tableaux de la feuille F24.

    A partir de là, dans ce tableau L24, dans la colonne A, à partir de la case 12 il y a une série de chiffres de 1 à 28. Ces chiffres correspondent à des tableaux se trouvant dans le feuille F24 (puisque L24 a été activée). Si je double clique sur 1 alors seul le tableau 1 de la feuille F24 s'affiche, idem pour les autres, si je choisis 24, ce sera le tableau 24 qui s'affichera.

    C'est cela que je cherche à réaliser. J'espère avoir été assez clair sinon n'hésites pas à me le dire.

    Merci encore pour ton aide

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

Discussions similaires

  1. Macro excel pour toutes les feuilles du classeur
    Par duffie34 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/03/2013, 12h55
  2. [XL-2010] Un seul code VB pour toutes les feuilles
    Par juan67 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 11/02/2013, 16h45
  3. [XL-2003] Macro ou VB pour toutes les feuilles
    Par jeanphi45 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2011, 10h53
  4. Une procédure pour toutes les feuilles
    Par docjo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2009, 07h32
  5. utiliser une seule servlet pour toutes les jsp
    Par DoubleU dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 20/09/2007, 19h30

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