VB : selectionner une page

  • Initiateur de la discussion Initiateur de la discussion Pika
  • 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 !

P

Pika

Guest
Bonjour,
j'ai créé une macro qu'on lance a chaque démarrage du fichier excel (via Update), cependant, cette macro doit s'appliquer à une page précise. Or actuellement, elle prend en compte les données sur la page ou elle se trouve.
Mon fichier contient en effet de nombreuses feuilles, et si on enregistre sur la feuille 5, quand on lancera le fichier, la macro tiendra compte des données de la feuille 5, et non pas de la 1 ( celle que je souhaite).

Voila mon code :
Public Function NomMinMoy(ListeNom As Range, ListeMoy As Range) As String
'Set Sheet = ActiveWorkbook.Sheets('Données HV')
ColNom = ListeNom.Column
ColMoy = ListeMoy.Column
LigMin = ListeMoy.Row
MonMin = Cells(LigMin, ColMoy)
For Ligne = ListeMoy.Row To ListeMoy.Row + ListeMoy.Rows.Count - 1
If Cells(Ligne, ColMoy) < MonMin Then
LigMin = Ligne
MonMin = Cells(LigMin, ColMoy)
End If
Next Ligne

NomMinMoy = Cells(LigMin, ColNom)
End Function

Mon probleme est donc de spécifier la page 'Données HV' pour que ce soit toujours sur cette page que la macro s'execute.
Petite précision : cette macro est contenu dans un module, et je ne peux pas la mettre dans la page en question.
Merci 😀
 
Bonjour le forum, Pika,

Moi au début de ta macro je ferais ca :
Code:
Set Sheet = Sheets('Données HV')

If Sheet is nothing then 'Gère le faites que la feuille n'existe pas
msgbox 'Feuille Données HV introuvable, Abandon de la macro',vbinformation + vbokonly, 'Erreur...'
exit sub
else
sheet.select ' Sinon séléctionne la feuille
end if

Petite remarque supplémentaire : J'evite toujours autant que possible de nommer mes variables avec des noms approchants des instructions VB, genre cell, sheet, etc...

Je prefere donner des noms plus exotiques mais plus sûres. Dans ton exemple plutôt que Sheet j'aurais mis : MaFeuille.
Comme cela ca evite tout erreur d'interprétation par VB et par moi ! lol

++

Creepy
 
Bonjour Robert, Creepy

je vous remercie de vos réponses.
ALors oui, Robert j'avais déjà essayé cela ... et ca ne marche pas.
Et oui creepy, d'habitude je ne mets pas de nom de variables si proche du code, ce qui effectivement peut porter a confusion... la c'etait juste des essais 😀.

Et malheureusement, ton code ne marche pas. il s'agit d'une fonction et donc le end sub n'est pas apprécié 😀 et cela ne le force pas a utiliser la page Données HV.

Cependant, en lisant vos réponses, je m'apercois que le code
Sheets('Données HV').Select
est correct ... et que puisque ca ne marche pas, mon erreur serait peut etre ailleurs... 🙁

si vous avez d'autres idées .. je suis preneur 😀

En tout cas merci 😀
 
Hello,

Pour d'autres suggestions il faudrait que tu nous mettes un petit exemple.

L'autre idée qui me vient comme ca, c'est que peut être avant de selectionner la feuille, ce serait de selectionner le fichier. Enfin c'est une idée comme ca !

++

Creepy
 
Je vois pas vraiment quel exemple je peux mettre ... mais je vais mieux détailler le fonctionnement :

J'appelle la macro dans la page 'Données HV' en K6
le resultat est copié dans une autre page
='Données HV'!$K$6

Pour appeller la macro j'utilise :
=nomminmoy(B21:B32;F21:F32)

La colonne B contient des noms, la colonne F des chiffres.

Je souhaite donc bloquer la macro a la page 'Données HV'.

ce que je trouve bizar, c'est que la macro s'execute en fonction de la page qui est ouverte ... :
Quand on ouvre le fichier, la macro prend en compte la page qu on voit et non pas celle que je specifie avec sheets('Données HV').Select

Si je dois la placer ailleurs que dans un module pour que ca marche ... dites le moi 😀

Merci.

Pika
 
Désolé Robert, je n'avais aps vu ta réponse quand j'ai posté.
Alors j'ai essayé et ca ne marche toujours pas ...

J'ai placé ton code en début de mon module... dois je le placer ailleurs ?

Au passage, les macros s'execute a l'ouverture .. mais seulement si j'accepte l'update .. en effet, beaucoup de données correspondent a des liens, et à l'ouverture du fichier, il me demande si je souhaite le mettre à jour : c'est dans le cas ou j'accepte que la macro s'execute.

Voila, je continue aussi à chercher 😀 et je reste ouvert à toutes propositions

Pika
 
Bonjour le fil , le forum,

Non Pika. Ce code doit être placé dans le composant VBA ThisWorkbook. Dans Visual Basic Editor, double-clique sur ce'composant dans le cadre à en haut à gauche. Ensuide colle le code que je t'ai donné dans le grand cadre de droite.
 
Hello,

Pour d'autres suggestions il faudrait que tu nous mettes un petit exemple.

L'autre idée qui me vient comme ca, c'est que peut être avant de selectionner la feuille, ce serait de selectionner le fichier. Enfin c'est une idée comme ca !

++

Creepy

EDIT : NE PAS TENIR COMPTE DE CE MESSAGE !! COMMENT CE FAIT IL QU'IL SE SOIT DUPLIQUE ??

Message édité par: Creepy, à: 04/07/2005 11:30
 
Re Bonjour,

Alors je l'ai coller ou tu me l'as indiqué ... et en fait les valeurs sont toujours prises sur la page ou on se trouve quand on ouvre le classeur. Ton code me fait aller sur la page 'Données HV' mais après que les macros soient executées.

Pika
 
Bonjour Robert, Pika, Re Creepy, le Forum

NB : Sans aucun test sur la Function elle_même, mais juste pour la Syntax sur un Object WorkSheet avec With

Public Function NomMinMoy(ListeNom As Range, ListeMoy As Range) As String
Dim WSCible As Worksheet
Dim Ligne As Integer, LigMin As Integer
Dim ColNom As Byte, ColMoy As Byte
Dim MonMin As Double

Set WSCible = ActiveWorkbook.Sheets('Données HV')

&nbsp; &nbsp; ColNom = ListeNom.Column
&nbsp; &nbsp; ColMoy = ListeMoy.Column
&nbsp; &nbsp; LigMin = ListeMoy.Row
&nbsp; &nbsp;
&nbsp; &nbsp;
With WSCible
&nbsp; &nbsp; &nbsp; &nbsp; MonMin = .Cells(LigMin, ColMoy)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
For Ligne = ListeMoy.Row To ListeMoy.Row + ListeMoy.Rows.Count - 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If .Cells(Ligne, ColMoy) < MonMin Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LigMin = Ligne
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MonMin = .Cells(LigMin, ColMoy)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp; &nbsp; &nbsp;
Next Ligne
&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; NomMinMoy = .Cells(LigMin, ColNom)
&nbsp; &nbsp;
End With
End Function

NB Bien noter le . devant 'Cells'

Bon Appétit
@+Thierry
 
- 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

I
Réponses
2
Affichages
944
im_Guillaume
I
E
  • Question Question
Réponses
6
Affichages
1 K
elmilo13
E
S
Réponses
13
Affichages
2 K
Stedemart
S
W
Réponses
4
Affichages
3 K
WhatIsVBA
W
N
Réponses
6
Affichages
2 K
Retour