Soucis avec un code !

S

Sabrina

Guest
Bonjour le forum,

Dans mon USF, quand je click sur un bouton, le 2 en l'occurence, je dois me posissionner en Z153 de la feuille active et que celle-ci n'affiche que la plage
'$A$139:$AP$166', et qenfin que le USF soit effacé .

Voici le code que j'ai fait, mais il ne répond pas exactement à ce que je souhaite.

Private Sub CommandButton2_Click()

Application.ScreenUpdating = True
ScrollArea = '$A$139:$AP$166'
Range('Z153').Select
With ActiveWindow
.ScrollRow = 139
.ScrollColumn = 1
End With
Unload Me
ThisWorkbook.Close SaveChanges = True

End Sub

Pourriez vous m'aider SVP, merci et bonne journée.
Sabrina
 

excalibur

XLDnaute Impliqué
bonjour Sabrina , le forum si j ai bien compris ........................Private Sub CommandButton2_Click()
[z153].Activate
Worksheets('feuil1').ScrollArea = ('a139:ap166') ' feuil1 dans ex
With ActiveWindow
.ScrollRow = 139
.ScrollColumn = 1
End With
Unload Me
End Sub'salutations
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Sabrina, le Forum

Si j'interprète bien ce que ton UserForm doit faire, c'est tout simplement de préparer avant la sauvegarde la plage Accessible (ScrollArea), la plage Visible (ScrollRow , ScrollColumn ) et la plage Sélectionée (Range('Z153').Select) pour la prochaine ouverture du classeur...

Pour les deux dernières possibilités 'No Soucy'... par contre pour l'Accessibilité des Cellules, la propriété ScrollArea est 'volatile' tout comme d'autres propriétés telle 'UserInterfaceOnly' par exemple...

Ce que j'entends par 'Volatile' c'est tout simplement que dans les propriétés des Feuilles, que ce soit en mode Design par VBE (Visual Basic Editor), soit en RunTime par VBA, la propriété 'ScrollArea' n'est pas conservée après fermeture du Classeur. Ton problème, si je l'interprète correctement est dû à tout simplement ce phénomène.

Une solution paliative consisterait en appliquant ce ScrollAreaau au moment de l'ouverture de ton Classeur; en s'appuyant sur l'évènementielle 'Workbook_Open' à placer dans le Private Module de 'ThisWorkBook', comme ceci :

Private Sub Workbook_Open()

   
With ActiveSheet
    .ScrollArea = '$A$139:$AP$166'
    .Range('Z153').Select
   
End With
   
   
With ActiveWindow
    .ScrollRow = 139
    .ScrollColumn = 1
   
End With

End Sub

Il est clair que si ce CommandButton2 doit agir pour une sauvegarde particulière sur un ScrollArea différent en fonction d'un besoin, et qu'un hypothétique 'CommandButton1' ou autre, pourrait quand à lui interférer pour une autre zone de ScrollArea...

Cette éventualité t'obligera à passer par une WorkSheet 'Settings' complètement transparante pour le User puisqu'elle peut être en mode Visible = xlSheetVeryHidden...

Pour obtenir ceci tes CommandButtons agiraient de la sorte pour paramétrer cette feuille 'Settings' :

Option Explicit

Private Sub CommandButton1_Click()

   
With Sheets('Settings')
        .Range('A1') = '$A$150:$AP$178'
        .Range('A2') = 150
        .Range('A3') = 1
        .Range('A4') = 'Z164'
   
End With


Unload Me
ThisWorkbook.Close SaveChanges:=True
End Sub

Private Sub CommandButton2_Click()
   
With Sheets('Settings')
        .Range('A1') = '$A$139:$AP$166'
        .Range('A2') = 139
        .Range('A3') = 1
        .Range('A4') = 'Z153'
   
End With
Unload Me
ThisWorkbook.Close SaveChanges:=True
End Sub

Private Sub UserForm_Click()

End Sub


Ensuite ton Code WorkBook_Open dans ThisWorkbook ressemblerait à ceci :

Option Explicit

Private Sub Workbook_Open()
Dim AdressScrollArea As String
Dim AdressScrollColumn As Integer
Dim AdressScrollRow As Integer
Dim AdressSelection As String

   
With Sheets('Settings')
        AdressScrollArea = .Range('A1')
        AdressScrollColumn = .Range('A2')
        AdressScrollRow = .Range('A3')
        AdressSelection = .Range('A4')
   
End With



   
With ActiveSheet
    .ScrollArea = AdressScrollArea
    .Range(AdressSelection).Select
   
End With
   
   
With ActiveWindow
    .ScrollRow = AdressScrollColumn
    .ScrollColumn = AdressScrollRow
   
End With

End Sub


Voilà, je pense que tu as les éléments dont tu as besoin, bonne journée fériée.

[ol]@+Thierry[/ol]


EDITION !!!

Bonjour Excalibur,

Désolé lors de la rédaction d'un long post comme celui-ci je ne t'avais pas vu venir. Mais hélas, comme j'ai précisé, la ScrollArea, même dans ta proposition ne persitera pas après une fermeture/ré-ouvertrure du classeur.

Par ailleurs je préconise de s'abstenir d'utiliser les crochets '[z153].Activate' en VBA.

Nous avons déjà fait différentes démonstrations dans le Forum 'First Generation' que les [Crochets] (qui sous-entendent 'Evaluate' en VBA), pour une simple référence à une adresse de range, ne sont pas du tout optimisés car ils s'accaparrent bien plus de mémoire et ralentissent l'exécution d'algo.

VBA dans toute sa splendeur permet à tout un chacun de développer selon ses aptitudes et connaissances, donc dans le cas présent celà n'aura pas vraiment d'influence, mais tant qu'à faire il est toujours de bon conseil d'appliquer des structures correctes dès ses premiers pas en programmation.

Bonne Journée Off à toi aussi
[ol]@+Thierry[/ol]

Message édité par: _Thierry, à: 01/11/2005 13:45
 

Discussions similaires

Statistiques des forums

Discussions
312 963
Messages
2 093 998
Membres
105 906
dernier inscrit
aifa