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 Sub

On 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 Sub

Attention 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 Sub

Bon 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.

Rechercher des sujets similaires à "bouton toupie active"