IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA] Spinbutton avec condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut [VBA] Spinbutton avec condition
    Salut à toutes la communauté des Développeurs

    j'essaye depuis un moment d'adapter les différents code trouver sur les spinbutton mais sans succès.

    En effet, j'ai un userform dans lequel j'ai un textbox et un spinbutton.
    le spinbutton doit faire défiler dans le textbox les valeurs trouvées en colonne B si les valeurs correspondantes en colonne G sont différentes de 0.

    En espérant avoir été un peu clair, Merci de vos conseils et astuces

    A+

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Option Explicit
    Public Lig As Long
    Private Sub SpinButton1_Change()
    Lig = Lig + Me.SpinButton1 - 10
    Do
        If ActiveSheet.Range("G" & Lig) <> 0 Then Exit Do
        Lig = Lig + Me.SpinButton1 - 10
    Loop Until Lig >= ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row Or Lig = 0
    If Lig = 0 Then Lig = 1
    If Lig > ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row Then Lig = Lig - 1
    Me.TextBox1 = Range("B" & Lig)
    Application.EnableEvents = False
    Me.SpinButton1 = 10
    Application.EnableEvents = True
    End Sub
    Private Sub UserForm_Initialize()
    Me.SpinButton1 = 10
    End Sub
    je me sers du spinbutton en incrément/décrément de 1, autour de 10
    pour éviter un 2me passage, je bloques les événements juste avant de remettre la valeur du spin button à 10, puis je remet en route.

    Comme je ne donne qu'une idée de comment je gèrerai le problème, j'ai mis des garde-fous de principe. Le code est à remanier en fonction des besoins réels.
    A+

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    Salut Gorfael

    Merci pour ta réponse.

    J'ai essayé et j'ai obtenu une " Erreur d'exécution '1004', Erreur definie par l'application ou l'objet."

    J'aimerai aussi savoir si le 10 est le nombre de cellule à parcourir.

    Merci encore

    A+

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Citation Envoyé par kedas Voir le message
    Salut Gorfael

    Merci pour ta réponse.

    J'ai essayé et j'ai obtenu une " Erreur d'exécution '1004', Erreur definie par l'application ou l'objet."

    J'aimerai aussi savoir si le 10 est le nombre de cellule à parcourir.

    Merci encore

    A+
    Salut
    L'erreur est sur quelle ligne de code ? mets un point d'arrêt sur les noms de macros, et exécute en pas à pas pour savoir la ligne en erreur.

    Mais comme je n'ai mis que des garde-fou mini, il faut fixer la ligne de départ dans l'initialisation du USF et comme je n'ai pas d'indication, j'ai laissé à 0, et une commande vers le bas bloque le système.

    La valeur de spinbutton va de 0 à l'infini (enfin presque).
    Pour pouvoir avoir une valeur négative, tu ne peux pas en direct => En fixant un niveau à 10, si c'est en augmentant => spinbutton=11 => ligne=ligne+spinbutton-10 <=> ligne=ligne+11-10 <=> Ligne=ligne+1
    en descendant => spinbutton=9 =>
    ligne=ligne+spinbutton-10 <=> ligne=ligne+9-10 <=> Ligne=ligne-1

    Je n'ai pas donné une macro exécutable !! Seulement un principe à adapter. La macro que je peux proposer n'est JAMAIS plus précise que les données !

    A+

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    salut

    Désolé pour cette omission.
    L'erreur en fait est sur la ligne ]If ActiveSheet.Range("G" & Lig) <> 0

    Dans ma feuille, la ligne de depart est la ligne 7 et peut aller jusqu'à ligne 257.
    A+

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Citation Envoyé par kedas Voir le message
    salut

    Désolé pour cette omission.
    L'erreur en fait est sur la ligne If ActiveSheet.Range("G" & Lig) <> 0

    Dans ma feuille, la ligne de depart est la ligne 7 et peut aller jusqu'à ligne 257.
    A+
    Salut
    Blanc rend plus invisible que jaune, tu devrais essayer

    si c'est cette ligne :
    If ActiveSheet.Range("G" & Lig) <> 0 then
    il faut que la macro d'initialisation du formulaire mettent la variable à 7.: le problème viens que quand on initialise le spinbutton à 10 => spinbutton change => lig = lig + spinbutton -10 <=> lig =0 + 10 - 10 = 0 et range("G0") donne une erreur
    Le fait de passer lig = 7 résoudra vraisemblablement le problème, si G7 <> 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Option Explicit
    Public Lig As Long
    Private Sub SpinButton1_Change()
    Lig = Lig + Me.SpinButton1 - 10
    Do
        If ActiveSheet.Range("G" & Lig) <> 0 Then Exit Do
        Lig = IIf(Me.SpinButton1 = 10, Lig = Lig + 1, Lig + Me.SpinButton1 - 10)
    Loop Until Lig >= ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row Or Lig <= 7
    If Lig <= 7 Then
        Lig = 7
    ElseIf Lig > ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row Then
        Lig = Lig - 1
    End If
    Me.TextBox1 = Range("B" & Lig)
    Application.EnableEvents = False
    Me.SpinButton1 = 10
    Application.EnableEvents = True
    End Sub
    Private Sub UserForm_Initialize()
    Lig = 7
    Me.SpinButton1 = 10
    End Sub
    A+

Discussions similaires

  1. [VBA] update avec condition
    Par le_niak dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/09/2007, 10h42
  2. Réponses: 2
    Dernier message: 17/07/2007, 11h53
  3. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 17h01
  4. [VBA-E] Suppression des colonnes avec condition
    Par desdenova dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2007, 13h39
  5. Réponses: 6
    Dernier message: 15/06/2006, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo