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 :

Userform initialisé en fonction de la ligne selectionée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Par défaut Userform initialisé en fonction de la ligne selectionée
    Bonjour à tous,

    J'ai créer un userform avec des checkbox et qui incrémente les cellules de toute une colonne (la colonne X)

    Toutefois, j'aimerais que lorsque je doubleclique sur X234 (ou une autre cellule de la colonne X) pour initialiser mon userform, la ligne de la celulle ou j'ai cliquer soit prise en compte et prise pour cible pour les modifications apportées par les checkbox.

    Quelqu'un peut-il m'aider?

    Voici le code de la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column <> 23 Then UserForm1.Show
    End Sub
    Voici le code d'initialisation du userform :
    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
    Private Sub UserForm_Initialize()
    Dim i As Integer
     
    ' Initialise le tableau et la première ligne
    ReDim tabl(1000) As String
    ligne = Range("X" & i).Row
     
    ' vide la colonne X
    For i = ligne To Range("X65536").End(xlUp).Row
        Range("x" & i).Clear
    Next
     
    Label1.Caption = ligne
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub

    Pour vous donner toutes les infos dont vous pourriez avoir besoin, voilà le code en haut du userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
     
    Dim tabl() As String
    Dim ligne As Integer
    Et celui d'une checkbox :
    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
    Private Sub CheckBox1_Change()
    Dim i As Integer
    Dim variable As String
     
     
    Range("X" & ligne).Clear
     
    If CheckBox1.Value = True Then
        tabl(1) = "2339, "
    Else
        tabl(1) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub

    Merci d'avance !
    David

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Si c'est la recherche de la ligne qui te pose problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' vide la colonne X
    For i = ligne To Range("X65536").End(xlUp).Row
        Range("x" & i).Clear
    Next
    Tu vides la colonne ou a partir de la ligne de la cellule double cliquer?

    pour vider à partir de la ligne de la cellule en évitant une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows(ligne & ":" & Range("X" & Rows.Count).End(xlUp).Row).Clear
    NB : pour les lignes, utilises le type de donnée Long plutôt qu'Integer (limité à 32768)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Par défaut
    Merci beaucoup c'est éxactement ce que je cherchais !

    J'aurais une question supplémentaire à propos de mes checkbox si cela ne te dérange pas :

    Étant donné que
    -chacune de mes checkbox incrémente une valeur qui lui est propre
    -plusieurs checkbox peuvent incrémenter la même cellule

    Comment puis-je faire pour qu'à l'ouverture de mon userform, je puisse obtenir que mes checkbox dont les valeurs sont déjà contenues dans la cellule "visée" soient cochées?

    J'ai essayer de rajouter ça dans mes codes de checkbox, mais sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Range("X" & ligne).Value = "2339, " Then
    CheckBox1.Value = True
    Else
    CheckBox1.Value = False
    End If
    Merci !

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    As tu essayé de mettre ton code dans Initialize

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Par défaut
    Yep, ça marche pas plus.

    Tu veux jeter un coup d’œil à l’ensemble de mon code userform?

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    Option Explicit
     
    Dim tabl() As String
    Dim ligne As Integer
     
     
    Private Sub CheckBox1_Change()
    Dim i As Integer
    Dim variable As String
     
     
    Range("X" & ligne).Clear
     
    If CheckBox1.Value = True Then
        tabl(1) = "2339, "
    Else
        tabl(1) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
     
    Private Sub CheckBox2_Change()
    Dim i As Integer
    Dim variable As String
     
    Range("X" & ligne).Clear
     
    If CheckBox2.Value = True Then
        tabl(2) = "2340, "
    Else
        tabl(2) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
     
    Private Sub Label1_Click()
    Label1.Caption = ligne
     
    End Sub
     
    Private Sub Label2_Click()
     
    End Sub
     
    Private Sub Label3_Click()
     
    End Sub
     
    Private Sub Label4_Click()
     
    End Sub
     
    Private Sub passeralaligne_Click()
     
    ' incrémente la ligne
    ligne = ligne + 1
     
    ' vide le tableau
    ReDim tabl(1000) As String
     
    ' vide l'ensemble des CheckBox
    Dim nouveau As Control
    For Each nouveau In Controls
       Select Case TypeName(nouveau)
       Case "CheckBox":
          nouveau.Value = False
       End Select
     
    Label1.Caption = ligne
     
    Next
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
     
    Private Sub remonterlaligne_Click()
     
     
    ' incrémente la ligne
    ligne = ligne - 1
     
    ' vide le tableau
    ReDim tabl(1000) As String
     
    ' vide l'ensemble des CheckBox
    Dim nouveau As Control
    For Each nouveau In Controls
       Select Case TypeName(nouveau)
       Case "CheckBox":
          nouveau.Value = False
       End Select
     
    Label1.Caption = ligne
     
    Next
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
     
    Private Sub sortie_Click()
     
    ' ferme le formulaire
    Unload UserForm1
     
    End Sub
     
     
     
    Private Sub UserForm_Initialize()
    Dim i As Integer
     
    ' Initialise le tableau et la première ligne
    ReDim tabl(1000) As String
    ligne = ActiveCell.Row
     
    Label1.Caption = ligne
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
    Merci !

Discussions similaires

  1. Réponses: 13
    Dernier message: 13/08/2007, 14h29
  2. Réponses: 4
    Dernier message: 24/05/2007, 15h04
  3. Réponses: 2
    Dernier message: 13/12/2006, 20h30
  4. Réponses: 2
    Dernier message: 18/05/2006, 13h38
  5. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42

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