Pb VBA excel pilotage de fenêtre

rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008 - 18 juin 2008 à 17:21
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008 - 21 juin 2008 à 12:10
Bonjour à tous,

dans le cadre de mon stage je suis amené à découvrir VBA, cela fait deux jours que j'avance mais je bute sur un problème récurrent, j'aimerais emmener la fenêtre d'excel sur une cellule laquelle est déterminer par une fonction. La fonction marche bien et me donne ligne et colonne de la cellule. Le problème c'est que lorsque j'essaie d'envoyer la fenêtre sur cette position il ne se passe rien, j'ai essayé plusieurs méthodes telles que :

ActiveWindow.SmallScroll Down:= valeur

Cells(Result, c).Activate
With ActiveWindow
.ScrollColumn = ActiveCell.Column
.ScrollRow = ActiveCell.Row
End With

mais cela ne fonctionne pas, la fenêtre ne bouge pas. Comme je l'ai dis je suis dans une fonction, alors j'ai essayé dans une procédure sub et la miracle cela fonctionne. néanmoins j'ai beaucoup de paramètre dans ma fonction et je ne veux pas la transformer en sub qui rendrai la frappe des paramètres trop longue. J'ai alors essayé de piloter avec une sub en l'appelant de la fonction :

Call Center

et

Sub Center()
ActiveWindow.SmallScroll Down:=Result
End Sub

Result est bien défini en dehors des deux procédure et quand je n'appel que center cela marche très bien. Mais pas lorsque j'utilise ma fonction. Je ne sais plus trop quoi faire, si il est impossible de piloter la fenêtre dans une procédure ce serai vraiment un gros trou dans les fonctions de vba, et ce serai étonnant.

Est ce que quelqu'un peut m'aider?
Merci d'avance et désolé si la solution est évidente, perso j'ai bien cherché et je ne trouve pas.

13 réponses

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

j'aimerais emmener la fenêtre d'excel sur une cellule ??? ça veut dire quoi ? c'est comme si tu voulais mettre ta voiture dans son coffre(de la meme voiture) ou tes pantalons dans une de ses poches(du meme pantalon) Kway avait inventé le principe mais j'ai jamais imaginé que quelqu'un essairait avec excel

Mais je crois avoir compris : tu voudrais afficher/centrer une cellule de la feuille active sur la fenetre d'excel.

tu pourrais nous donner ta fonction pour mieux comprendre le probleme.

sinon une autre solution :

Application.Goto Reference:=ActiveSheet.Range("Aj400"),Scroll:=True

A+
0
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008
18 juin 2008 à 19:28
merci big_fish mais cela ne fonctionne pas non plus. cette ligne permet bien de recentrer la fenetre sur une cellule mais dès que tu la met dans une fonction ça ne marche plus. Je cherche à faire quelque chose du genre:

Function GO2(A As Variant, B As Variant)
Application.Goto Reference:=ActiveSheet.Cells(A, B), Scroll:=True
End Function
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
19 juin 2008 à 09:31
bonjour,
Tu ne précise pas Excel ????,
Ta fonction est dans un module de feuille ou dans un module de macro ?
Si ta fonction est dans un module de feuille c'est pas possible d'agir sur une autre feuille.
Si ta fonction est dans un module, essaye en mettant le nom de la feuille d'abord...
Sheets("NomFeuille").cells(X,Y).Activate

A+
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2008 à 10:31
salut,

je pense que tu nous embrouilles un peu avec ta demande.
Un simple Cells(x, y).Activate suffit pour centrer la fenêtre Excel sur cette cellule, et ce, peu importe d'où tu appelles cette instruction.

Tu veux une fonction ? pas besoin, le Activate de l'objet Cells ou Range le fait très bien.

Donc si ma réponse ne te convient pas, donne plus de détails sur la localisation de ta Sub ou Function (Module, Sheets) et ce genre de chose utile pour notre compréhension

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0

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

Posez votre question
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008
19 juin 2008 à 11:15
Salut et merci pour vos réponses,

je suis bien sous excel et dans un module, mon problème principal vient du fait que toute ses lignes permettent bien d'envoyer la fenêtre au dessus d'une cellule que ce soit activate ou select mais seulement si l'on se trouve dans une procédure de type sub. Ma fonction est toute symple, et elle a déjà été le sujet de conversation, elle permet de rechercher une donnée dans une colonne du fichier les paramètres de la fonction sont le String recherché, la colonne, la ligne de départ et la ligne de fin de la recherche. Je n'utilise pas Find mais

InStr(1, Cells(i, c).Value, Val, vbTextCompare) = 0

dans une boucle If pour  déterminer l'emplacement de la l'information. Soit elle n'est pas trouvé et alors j'ai un message "pas de valeur trouvée" soit j'ai alors toutes les indications la colonne et la ligne de la cellule qui contient la recherche. C'est alors que dans le cas où l'on trouve, je voudrais que la fênetre active soit au niveau de cette ligne, mais c'est alors que se pose le problème : la fenêtre ne bouge pas reste la où elle était. Pour l'instant faute de contre éxemple, je pense que c'est du au fait que mon programme soit une fonction.

Dès que je cherche à centrer la fenètre quelque par dans une sub ça marche très bien, alors deuxième étape j'ai essayé d'appeler une sub dans ma fonction avec "Call Center", mais la non plus il ne se passe rien. La procédure marche très bien lorsqu'elle est appelée seule mais pas lorsqu'elle est appelée de ma fonction.

Je ne cherche pas forcément à trouver une solution miracle, mais j'aimerais juste comprendre si c'est une limitation inhérente aux fonctions VBA ou si c'est moi qui m'y prends mal.

encore un dernier exemple, Result est le nom de ma ligne et c est ma colonne,

Sheets("Nomdelafeuille").Cells(Result, c).Activate

ne marche pas dans la fonction, mais marche très bien dans une
Sub Center()
Sheets("Nomdelafeuille").Cells(Result, c).Activate
End Sub
pour peu que j'ai déclaré result en Option Explicit et elle pointe vers la bonne cellule.

Voilà merci pour le temps que vous consacrez à mon petit problème.
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
19 juin 2008 à 11:21
Ont risque de tourner en rond encore longtemps, montre ta macro, ce serra plus simple.
0
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008
19 juin 2008 à 11:34
ok, voilà mais elle n'a rien de spéciale :

Function Find3(ByRef Val As String, c As Double, sta As Double, sto As Double)
Dim ok As Double
Dim i As Double
Result = 0
i = sta
ok = 0
If Val <> "" Then
    While ok <> 1
            If (InStr(1, Cells(i, c).Value, Val, vbTextCompare) = 0) Then
            i = i + 1
            Else
            Result = i
            ok = 1
        End If
        If i > sto Then
            ok = 1
            MsgBox ("no data found")
        End If
    Wend
MsgBox ("result " & Result)
End If
Cells(Result, c).Activate
End Function
0
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008
19 juin 2008 à 11:38
Rmq
même problème avec
ActiveSheet.Cells(Result, c).Activate
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
19 juin 2008 à 11:57
Macro testée, fonctionne normalement et cellule activée...
Tu n'aurrais pas des événement gérer dans la feuille comme par exemple dans
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Private Sub Worksheet_Activate()
...
Si c'est le cas tu peu ajouter au début de ta fonction
  Application.EnableEvents = False
 ......
et à la fin
     Application.EnableEvents = true
0
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008
19 juin 2008 à 12:30
Merci pour ta réponse rapide,

Application.EnableEvents = False
 ......
Application.EnableEvents = true

ne change rien, à priori j'ai bien dans un des modules des procédure qui modifient  les cellules affichées mais lorsque je test  ma fonction elles ne sont pas actives (elles ne font que cacher des lignes).Je vais creuser un peu pour voir si je trouve quelquechose qui interfère.
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
19 juin 2008 à 12:33
met un point d'arrèt au début de ta fonction (F9) et fais du pas à pas (F8) en cas que...
0
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008
19 juin 2008 à 12:53
Tout ce passe normalement, mais lorsque je passe sur
Sheets("Mafeuille").Cells(Result, c).Activate
Il ne se passe rien.
La fenêtre est partagée en deux:
lignes 1à5 (6à29 cachées)30 à 42 bloquées et ensuite le reste de la feuille est normal.
J'ai fait une procédure qui utilise le resultat dans la cellule du Find3 pour aller à la bonne ligne et ça marche bien

Sub Find()
Dim L1, L2, C1 As Double
Dim X As String
C1 = ActiveCell.Column
X = ActiveCell.Text
If X <> 0 Then
Sheets("Budget").Cells(X, C1).Activate
End If
End Sub

en gros en deux fois ça marche mais pas les 2 en même temps. Oo zarb
merci pour ton aide, si ça vient de la feuille je vais être hors course, je vais devoir demandé à mon maitre de stage. Je travaille sur des ajouts pour un Workbook assez important alors je ne maitrise pas tout.
0
rosbeef87100 Messages postés 8 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 21 juin 2008
21 juin 2008 à 12:10
Salut,

j'ai contourné le problème avec une list box activeX ce qui m'a permis d'utiliser une procedure sub et une sous procedure avec des déclarations globale. Je sais toujours pas pourquoi les commandes qui pemettent le scroling dans une page ne marche pas dans une fonction. Si je trouve je  le ferai un post. Merci à tous pour votre aide.
0
Rejoignez-nous