Bouton toupie active x
bonjour à tous
j'ai un fichier contenant des données sur plusieurs pages (3 pour l'exemple) en page 1 les resultats
j'ai mis un bouton toupie (active X) et je dedie la celle B2 pour voir mes resultats
je voudrai qu'en cliquant sur" up" de la toupie la valeur de la cellule B1 du feuil 2 s'affiche un autre clic affiche la valeur de B1 feuil 3 etc...
clic sur "down" affiche le resutat précédent.
je ne sais pas comment m'y prendre,
merci de votre aide
Bonsoir
Un fichier est TOUJOURS le bienvenu
Ta toupie est sur la feuille 2?
Quand tu clic sur UP tu veux voir B1 de la feuille 2
Quand tu clic sur re clic sur UP tu veux voir B1 de la feuille 3...
et apres?
En fait si ligne>1 on change de feuille?
et si ligne supérieur à nb ligne de la feuille en cours...
A+ François
Bonjour le fil, sasha2412
Je ne sais pas si j'ai tout bien compris mais bon, dans un premier temps il faut récupérer les index des feuilles, on part sur le principe que les feuilles ont toutes le préfixe « Feuil ». La feuille « Feuil1 » est la feuille de travail donc on ne la garde pas. Pour faire tout cela on va :
- Créer un module
- Lui donner un nom exemple « Current »
- Coller le code ci dessous
- Initialiser le « spinButton » à l'ouverture du classeur
- Adapter la procédure « Change » du SpinButton
- Afficher le résultat dans « Feuil1!B2 » selon la valeur de celui-ci
Voici le code à mettre dans le module :
Public Sub InitSpinButton()
Dim count As Long
count = 0
'// Parcours de toutes les feuilles du classeur
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'// Filtre les feuilles commençant par "Feuil" (sauf "Feuil1")
If UCase(ws.Name) Like "FEUIL*" And UCase(ws.Name) <> "FEUIL1" Then
If IsNumeric(Mid(ws.Name, 6)) Then
Dim tblSheets() As Long
ReDim Preserve tblSheets(0 To count)
tblSheets(count) = CLng(Mid(ws.Name, 6))
count = count + 1
End If
End If
Next ws
'// Configuration du SpinButton si des feuilles valides ont été trouvées
If count > 0 Then
Dim minVal As Long
minVal = tblSheets(0)
Dim maxVal As Long
maxVal = tblSheets(0)
'// Recherche du minimum et du maximum dans le tableau
Dim i As Long
For i = 1 To UBound(tblSheets)
If tblSheets(i) < minVal Then minVal = tblSheets(i)
If tblSheets(i) > maxVal Then maxVal = tblSheets(i)
Next i
'// Application des bornes au SpinButton
With Worksheets("Feuil1").SpinButton1
.Min = minVal
.Max = maxVal
'// Ajustement de la valeur initiale si nécessaire
If .Value < minVal Or .Value > maxVal Then
.Value = minVal
Else
'// Optionnel
'// Force la mise à jour de B2 à l'ouverture
Call Worksheets("Feuil1").SpinButton1_Change
End If
End With
End If
End SubOn appelle la procédure à l'ouverture du classeur et aux modifications des feuilles.
Private Sub Workbook_NewSheet(ByVal Sh As Object)
'// Si une feuille est ajouter on met à jour le SpinButton
Current.InitSpinButton
End Sub
Private Sub Workbook_Open()
'// On initialise le SpinButton
Current.InitSpinButton
End Sub
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
'// Si une feuille est supprimée on met à jour le spinButton
Current.InitSpinButton
End SubAttention on considère que les index de feuilles se suivent "Feuil1, Feuil2" Etc. sinon il faut revoir le code.
Il ne reste plus qu'a afficher le résultat sur le changement du SpinButton pour cela :
- Dans le menu Développeur activer la mode création
- Clic droit sur le SpinButton
- Visualiser le code
- Coller le code ci-dessous
Public Sub SpinButton1_Change()
Dim nomFeuil As String
nomFeuil = "Feuil" & Me.SpinButton1.Value
On Error Resume Next
Me.Range("B2").Value = Worksheets(nomFeuil).Range("B1").Value
If Err.Number <> 0 Then
Me.Range("B2").Value = "#FEUILLE INTROUVABLE#"
End If
On Error GoTo 0
End SubBon maintenant pour mon avis personnel ce code est perfectible et doit être amélioré mais c'est un bon début pour comprendre le fonctionnement.
Si par exemple vous avez un trou dans les index de feuilles le SpinButton va tenter d'afficher le résultat et affichera le message d'erreur "#FEUILLE INTROUVABLE#"
Pour ma part je serais d'avis plutôt de faire le travail avec un zone de liste déroulante qui serais chargée avec le nom des feuilles. La maintenance en serait amélioré.
bonsoir,
merci pour les réponses rapides
sûr que je n'aurai pas su écrire ce code
je vais tenter de le décortiquer et de comprendre
merci à fanfan et j paul
Re sasha2412,
Si vous voulez un exemple utilisant une zone de liste déroulante faites-en la demande.
On peu aussi adapter un classeur si vous avez cela sous la main.