Taille de code - VBA

Teritoto Messages postés 5 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 juin 2008 - 4 juin 2008 à 17:25
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 6 juin 2008 à 23:04
Bonjour,

J'ai un petit problème de taille de fichier (2Mo) à cause de mes codes VBA.

Dans un classeur Excel:
-j'ai près de 100 feuilles (chacune décrivant un produit)
-sur chaque feuille j'ai une combobox et un bouton ki me permettent de naviguer d'une page à l'autre facilement

voici le code:
      Private Sub CommandButton1_Click()



         Dim MySheet As Worksheet



         For Each MySheet In ThisWorkbook.Sheets
             If MySheet.Name = ComboBox1.Text Then
             MySheet.Select: Exit Sub
             End If

         Next MySheet





         End Sub





Mon souci est que d'avoir dupliqué ce code sur chaque page a fortment allourdi mon fichier (de près de 500ko).
Y-a-t'il une une astuce pour loger ce code sur le classeur (et non sur chaque page) et que le bouton soit lié à ce code unique?

Merci d'avance pour votre aide.

Teritoto

14 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
4 juin 2008 à 17:44
Bonjour,

Une solution simple, serait d'utiliser une UserForm, associé à un menu dans la barre de menu. Ainsi, toutes les feuilles serait "libres" (pas d'élément de formulaire dedans), et le code serait limité à sa plus simple expression.

Amicalement,
Us.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 juin 2008 à 18:04
Salut,

Salut us_30 sympat de te revoir a nouveau dans le coin

teritoto, tu peux aussi supprimer tout tes boutons et metre en forme une cellule pour qu'elle ressemble a un bouton puis mettre le code suivant dans le thisworbook de ton projet:

dans le code suivant je considere que la cellule qui fait office de bouton est la cellule B2

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    With Target        If .Cells.Count 1 And .Address "$B$2" Then
            Dim MySheet As Worksheet
            For Each MySheet In ThisWorkbook.Sheets
                If MySheet.Name = .Text Then
                    MySheet.Select: Exit Sub
                End If
            Next MySheet
        End If
    End With
End Sub

cela fera exactement la meme chose qu'avec un bouton mise a part que le code n'existe qu'unr fois dans thisworkbook

A+
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
4 juin 2008 à 18:22
Salut Bigfish_mais_le_vrai, heureux aussi de revoir les habitués...

(Je n'ai pas quitté VBF, mais je n'avais plus une minute à moi... enfin, bref...)

Ce que je trouve peu pratique, c'est qu'il faut écrire le nom de la feuille... Or qu'on pourrait penser à faire une liste déroulante, à priori, avec toutes les noms de feuilles. A moins que l'interêt serait de passer qu'à une seule feuille spécifique... Teritoto, pourrais-tu préciser ? (ton pb me donne l'idée d'un petit programme...)

Amicalement,
Us.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 juin 2008 à 02:11
Et pourquoi ne pas simplement utiliser le click droit en bas à gauche sur les 4 boutons fléchés de l'application ? aucun code et ça donne le même résultat que les combobox...

De toutes façons, la grosseur du programme n'a pas vraiment d'influence sur la lenteur de ce programme tant que le code n'est pas activé. Pour ce qui est des formules, là c'est différent...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
5 juin 2008 à 06:55
salut,

je suis d'accord avec Us_30 (salut)
Un UserForm en Non modal ferait très bien l'affaire.
Autres soluces :
* Module de classe (risque d'être long pour boucler au démarrage du classeur)
* Ajout d'un menu, genre à côté du ? (qui représente l'aide Excel)

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
Teritoto Messages postés 5 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 juin 2008
5 juin 2008 à 15:12
Bonjour à tous,

Mon objectif est de pouvoir rapidement passer d'une feuille à une autre et cela à partir de toutes les feuilles, sachant que je connais le nom de toutes les feuilles.

Merci de votre intérêt,
Teritoto
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 juin 2008 à 23:12
Si tu veux continuer avec ta méthode, une seule ligne devrait suffire.
À moins que la vérification soit nécessaire pour une raison que j'ignore...
Et le code pourrait être dans Combobox1_Click plutôt qu'un bouton. Ce qui donne un contrôle de moins sur 100 feuilles...

Private Sub CommandButton1_Click()
    Sheets(Combobox1.Text).activate
End Sub      

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
5 juin 2008 à 23:26
Bonsoir à tous, Mortalino et MPi,

C'est vrai que MPi a totalement raison sur son premier post... Faire un click droit sur les flèches... J'utilise pas souvent cette possibilité, mais qui réponds tout même bien au problème de navigation...

Amicalement,
Us.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 juin 2008 à 23:40
En fait, si je créais ce genre d'application pour mes propres besoins, j'opterais pour ma première réponse sans hésiter.

Par contre, si cette application devait être utilisée par d'autres, j'essaierais peut-être de créer une méthode plus conviviale comme cherche à faire Teritoto... Il y a pas mal de gens que je connais, et qui utilisent mes programmes... et il faut être prudent sur la façon dont on bâtit les applis (et tu en sais quelque chose, j'en suis sûr ). Ça ne prend pas grand chose pour les perdre... même avec des explications...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
5 juin 2008 à 23:51
100% d'accord.

... Si on veut faire un menu plus conviviale, il faut d'abord penser à la forme que cela doit revêtir... Une liste déroulante ? des gros boutons ? un classement des feuilles en ordre alphabétique ?... ou plus ciblé ; c'est à dire qu'à partir certaines feuilles, mettre plus en priorité l'accès à certaines autres feuilles spécifiques...? etc...

Amicalement,
Us.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
5 juin 2008 à 23:57
...
donc autrement dit un petit menu non module, toujours present,  qui evolu (s'adapte) en fonction de la feuille active
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
6 juin 2008 à 00:31
Oui, au moins en partie... peut-être en gardant au fur et à mesure une statistique des choix passés pour les proposer en priorité... 

Amicalement,
Us.
0
Teritoto Messages postés 5 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 6 juin 2008
6 juin 2008 à 13:54
Salut MPi,

Ou puis-je trouver ta combobox click?

Teritoto
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
6 juin 2008 à 23:04
Tu le trouveras si tu double-cliques le contrôle, et si c'est bien un contrôle VB de la barre d'outils VB.

Si tu utilises un contrôle de la barre Formulaire, tu n'auras pas cette possibilité. Tu ne peux que lui affecter une macro.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous