Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Optimisation du code

  • Initiateur de la discussion Initiateur de la discussion Harvey
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

H

Harvey

Guest
Bonsoir tout le monde,

J'utilise des macros identiques sur plusieurs feuilles d'un classeur. Ces macros sont affectées à des images.
Je souhaiterais n'utiliser qu'une seule macro (incorporée donc dans un module) afin d'optimiser mon code pour ne pas avoir à répéter la même procédure pour chaque feuille. J'ai d'ores et déjà essayé d'insérer le code tel quel dans un module mais plus rien ne fonctionne.
PS : Chaque bouton permet de naviguer à l'intérieur de la page tout en interdisant l'utilisation de l'ascenseur.

Merci d'avance pour vos réponses.
 

Pièces jointes

Re : Optimisation du code

Bonsoir Harvey, le Forum,

Ci-joint ton fichier modifié pour tenter de répondre à ta demande.

Tu peux lier l'ensemble de tes Shapes à l'unique procédure ci-dessous.
Attention toutefois, pour que ça fonctionne, il te faut impérativement renommer les Shapes bleus "Image 1", verts "Image 2" et rouges "Image 3" (quelque soit la feuille dans laquelle ils se trouvent).

Code:
[SIZE=2][COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Sub[/COLOR] Stylo_QuandClic()
[COLOR=GREEN]'myDearFriend! - 01/2007[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Nom [COLOR=NAVY]As String[/COLOR], Plage [COLOR=NAVY]As String
Dim[/COLOR] C [COLOR=NAVY]As[/COLOR] Range
    Nom = Application.Caller                                [COLOR=GREEN]'= "Image 1", "Image 2" ou "Image 3"[/COLOR]
    [COLOR=NAVY]Set[/COLOR] C = Cells(-17 + Val(Right(Nom, 1)) * 28, 1)         [COLOR=GREEN]'= Range("A11"), Range("A39") ou Range("A67")[/COLOR]
    Plage = Range(C.Offset(1, 0), C.Offset(24, 0)).Address  [COLOR=GREEN]'="A12:A36", "A40:A64" ou "A68:A92"[/COLOR]
    ActiveSheet.ScrollArea = ""
    Application.[COLOR=NAVY]GoTo[/COLOR] Reference:=Range("A1")
    Application.[COLOR=NAVY]GoTo[/COLOR] Reference:=C, Scroll:=[COLOR=NAVY]True[/COLOR]
    ActiveSheet.ScrollArea = Plage
[COLOR=NAVY]End Sub[/COLOR][/SIZE]
Cordialement,
 

Pièces jointes

Re : Optimisation du code

Bonsoir MyDearFriend,

Merci pour ta réponse... Épatant comme toujours!
Par contre je viens de me rendre compte d'une chose, rien à voir avec le fichier que tu as modifié je te rassure, mais il me semblait qu'en autorisant l'utilisation de l'ascenseur sur une zone définie, on pouvait toutefois opérer une sélection des cellules comprises dans cette zone, or ce n'est pas le cas...
Est-il possible de sélectionner une cellule dans la zone définie même si l'ascenseur est figé ?
 
Re : Optimisation du code

Re Harvey,

Dans le fichier que tu fournis, le ScrollArea est défini selon la plage "A12:A36". Si tu souhaites pouvoir sélectionner des cellules dans la zone, il convient donc de définir cette plage comme suit : "A12:R36" par exemple.

Dans la macro, il conviendrait donc de modifier la ligne comme suit :
Code:
[SIZE=2]Plage = Range(C.Offset(1, 0), C.Offset(24, [B]17[/B])).Address[/SIZE]
Cordialement,
 
Re : Optimisation du code

Il ne me reste plus qu'à adopter tes consignes à mon projet...
Un grand merci à toi, MyDearFriend.
Excellente fin de soirée et au plaisir.
 
Re : Optimisation du code

Une petite question pour la route...
A quoi correspond la valeur -17 dans la ligne suivante ? :
Set C = Cells(-17 + Val(Right(Nom, 1)) * 28, 1)

Elle me sera très utile pour la suite...
 
Re : Optimisation du code

Voilà le pourquoi de ma question.
J'avais besoin d'incrémenter une valeur constante afin de pouvoir visualiser d'autres tableaux présents à la suite des trois premiers. Chaque feuille se compose de six séries de trois tableaux et je voulais à partir du premier bouton pouvoir passer du premier tableau de la première série au tableau de la seconde série, etc, etc et ce suivant une valeur présente dans une cellule.

En voilà le résultat (il y a sûrement plus également) :

Sub Trimestre_QuandClic()
Dim Nom As String, Plage As String, Inc As String
Dim C As Range
With ActiveSheet
If .Range("B1").Value = "M1" Then Inc = -17
If .Range("B1").Value = "M2" Then Inc = 67
If .Range("B1").Value = "M3" Then Inc = 151
If .Range("B1").Value = "M4" Then Inc = 235
If .Range("B1").Value = "M5" Then Inc = 319
If .Range("B1").Value = "M6" Then Inc = 403
Nom = Application.Caller
Set C = Cells(Inc + Val(Right(Nom, 1)) * 28, 1)
Plage = Range(C.Offset(1, 0), C.Offset(25, 17)).Address
ActiveSheet.ScrollArea = ""
Application.Goto Reference:=Range("A1")
Application.Goto Reference:=C, Scroll:=True
ActiveSheet.ScrollArea = Plage
End With
End Sub
 
Dernière modification par un modérateur:
Re : Optimisation du code

Re,

L'objectif est d'atteindre la cellule A11, puis A39 et enfin A67, c'est à dire la ligne 11, puis 39 et enfin 67.

Ainsi, pour simplifier, si je pars de -17, je peux atteindre ces trois valeurs cibles avec un pas de 28 à chaque fois :
-17 + (28*1) = 11
-17 + (28*2) = 39
-17 + (28*3) = 67

Pour info, les valeurs 1, 2 et 3 sont extraites du nom du Shape ayant servi au lancement de la macro. Les Shapes étant nommés Image 1, Image 2 et Image 3. C'est l'expression Val(Right(Nom,1)) qui extrait cette valeur dans le nom du Shape.

Cordialement,

EDITION
Oups, je n'avais pas vu ton dernier message arriver... Mais je pense qu'avec les explications que je donne ici, tu devrais pouvoir adapter selon la configuration de tes feuilles.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

S
Réponses
3
Affichages
999
B
Réponses
2
Affichages
2 K
bastienb
B
D
Réponses
2
Affichages
14 K
discusagon
D
G
Réponses
0
Affichages
1 K
G
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…