VB : selectionner une page

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 :D
 

Creepy

XLDnaute Accro
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
 
P

Pika

Guest
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 :D.

Et malheureusement, ton code ne marche pas. il s'agit d'une fonction et donc le end sub n'est pas apprécié :D 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 :D

En tout cas merci :D
 

Creepy

XLDnaute Accro
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
 
P

Pika

Guest
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 :D

Merci.

Pika
 
P

Pika

Guest
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 :D et je reste ouvert à toutes propositions

Pika
 

Robert

XLDnaute Barbatruc
Repose en paix
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.
 

Creepy

XLDnaute Accro
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
 
P

Pika

Guest
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
 

_Thierry

XLDnaute Barbatruc
Repose en paix
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
 

Discussions similaires

Réponses
8
Affichages
676

Statistiques des forums

Discussions
312 378
Messages
2 087 760
Membres
103 661
dernier inscrit
fcleves