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 textbox objet


Sujet :

Macros et VBA Excel

  1. #41
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour à tous
    Je vais commencer par une citation ***** --->>
    http://dicocitations.lemonde.fr/cita...tion-27609.php

    Venons-en maintenant au sujet : Franck sait très bien qu'une listbox éditable est parfaitement réalisable (en édition directement sur les éléments de la listbox)
    Mais il ne s'agit-là que d'un exercice (il a été conduit à son terme) , certes amusant, mais sans autre intérêt réel, sauf celui ... d'alourdir ...

    En remettant les pieds sur terre, on aboutit à du bien plus simple et léger :
    - une textbox placée en dessous de la listbox
    - au clic sur l'un des éléments de la listbox -->> le texte de cet élément est copié sur la textbox
    - au change de la textbox, l'élément de la listbox prend la valeur modifiée dans la textbox
    Tout cela est extrêmement facile à mettre en oeuvre et plus que largement suffisant et efficace.


    EDIT explicatif du *****
    Le "mieux", c'est pour le développeur
    Le "bien", c'est pour l'utilisateur
    Lorsque le "mieux" du développeur nécessite un manuel d'emploi, le "bien" de l'utilisateur devient une "croix" et un motif d'irritation.
    La convivialité et l'intuitivité sont les maîtres-mots d'une application réussie.
    L'utilisateur qui veut modifier un élément cliquera instinctivement sur cet élément. En voyant apparaître une textbox avec le texte de cet élément, il lui viendra instinctivement et très naturellement à l'idée qu'elle est là pour lui permettre de modifier. S'il hésite, il tentera et ... verra que oui.
    Voilà voilà ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  2. #42
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    EDIT explicatif du *****
    Le "mieux", c'est pour le développeur
    Le "bien", c'est pour l'utilisateur
    Lorsque le "mieux" du développeur nécessite un manuel d'emploi, le "bien" de l'utilisateur devient une "croix" et un motif d'irritation.
    La convivialité et l'intuitivité sont les maîtres-mots d'une application réussie.
    L'utilisateur qui veut modifier un élément cliquera instinctivement sur cet élément. En voyant apparaître une textbox avec le texte de cet élément, il lui viendra instinctivement et très naturellement à l'idée qu'elle est là pour lui permettre de modifier. S'il hésite, il tentera et ... verra que oui.
    Voilà voilà ...
    Et comme dit l'adage, le mieux est l'ennemi du bien !

  3. #43
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pourriez-vous rédiger une synthèse propre, bien codée et utilisable par le demandeur? Pour compléter la remarque de Jacques sur le bien et le mieux, je pense qu'il est utile que le demandeur puisse s'y retrouver à un moment donné. Libre à vous, par la suite, de développer vos solutions sur le forum Contribuez, voire en demandant l'ouverture d'un projet. .

    Mais honnêtement, sans synthèse, je ne vois pas bien ce que le demandeur va pouvoir faire de tout ceci, vu le niveau qu'il a lui-même annoncé...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #44
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Voici un exemple, vite codé, tout simple d'utilisation.

    1 Userform comportant :
    > 5 textbox (TextBox1, TextBox2, ..., TextBox5)
    > 1 CommandButton1 (caption : OK)
    > 1 ListBox1 (régler la propriété Width à 345)
    placés comme ceci :
    Nom : userform.png
Affichages : 209
Taille : 7,5 Ko

    Le code de l'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
    Option Explicit
     
    Private EnableEvents As Boolean
     
    Private Sub CommandButton1_Click()
    Dim i As Byte, rep As Integer
        rep = vbNo
        If ListBox1.ListIndex <> -1 Then rep = MsgBox("Voulez-vous modifier la ligne sélectionnée?", vbYesNo + vbQuestion)
        If rep = vbNo Then
            ListBox1.AddItem TextBox1
            For i = 1 To 4
                ListBox1.List(ListBox1.ListCount - 1, i) = Me.Controls("TextBox" & i + 1)
                Me.Controls("TextBox" & i) = ""
            Next
            TextBox5 = ""
            TextBox1.SetFocus
        Else
            EnableEvents = True
            For i = 0 To 4
                ListBox1.List(ListBox1.ListIndex, i) = Me.Controls("TextBox" & i + 1)
                Me.Controls("TextBox" & i + 1) = ""
            Next
            TextBox5 = ""
            TextBox1.SetFocus
            EnableEvents = False
            ListBox1.ListIndex = -1
        End If
    End Sub
     
    Private Sub ListBox1_Click()
    Dim i As Byte
     
        If ListBox1.ListIndex = -1 Or EnableEvents Then Exit Sub
        For i = 0 To 4
            Me.Controls("TextBox" & i + 1) = ListBox1.List(ListBox1.ListIndex, i)
        Next
    End Sub
     
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim rep As Integer
        If ListBox1.ListIndex = -1 Then Exit Sub
        rep = MsgBox("Voulez-vous supprimer la ligne sélectionnée?", vbYesNo + vbQuestion)
        If rep = vbYes Then
            ListBox1.RemoveItem (ListBox1.ListIndex)
        End If
    End Sub
     
    Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        CommandButton1.SetFocus
    End Sub
     
    Private Sub UserForm_Activate()
    Dim i&, ArrCol
        TextBox1.SetFocus
        ListBox1.ColumnCount = 5
        ListBox1.ColumnWidths = "50;50;120;40;80"
        ArrCol = Array(0, 50, 100, 220, 260)
        For i = 1 To 5
            Me.Controls("TextBox" & i).Width = Split(Replace(ListBox1.ColumnWidths, " pt", ""), ";")(i - 1)
            Me.Controls("TextBox" & i).Left = ArrCol(i - 1) + ListBox1.Left
        Next i
        ListBox1.Width = 345
        CommandButton1.Move TextBox5.Left + TextBox5.Width, TextBox5.Top
    End Sub
    EDIT :
    On remplit les textbox,
    Un clic sur le bouton :
    >> si aucune ligne de la listbox n'est sélectionnée ==> ajoute une ligne et la remplit des infos contenues dans les textbox
    >> si une ligne est sélectionnée ==> demande si l'utilisateur veux modifier cette ligne
    ===>>>> si oui : modifie la ligne et la déselectionne
    ===>>>> si non : ajoute une nouvelle ligne
    >> Vide les textbox
    >> place le focus sur le textbox1
    Un clic sur la listbox ==> remplit les textbox des infos contenues dans cette ligne
    Voilà...

    EDIT 2 : un double clic sur une ligne de la listbox supprime cette ligne
    Cordialement,
    Franck

  5. #45
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Bonjour Franck,

    Pas testé, mais aucun doute... (Ca me semble tout de même plus simple et plus propre que ce qui avait été proposé par ailleurs...)

    Merci pour le demandeur initial.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #46
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour Pierre,

    J'ai édité mon message pour :
    1- ajouter le vidage des textbox dans le CommandButton1_Click
    2- ajouter un petit texte de présentation...

    Merci à toi.
    Cordialement,
    Franck

  7. #47
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Merci à tous et pour tout,

    C'est vrai qu'avec une synthèse c'est bien plus clair.

    mais effectivement vous m'avez donné un bon aperçu de ce qu'il est possible de faire avec des listbox, textbox et autre.

    Merci à tous.

  8. #48
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pour le plaisir, je me suis amusé avec une unique ComboBox.
    Le résultat est moins bon qu'avec 5 TextBox et une ListBox, mais je vous le livre tout de même, pour le fun

    Un UserForm avec dessus un ComboBox (ComboBox1) assez large (environ 300 points).

    Le code :
    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
    Option Explicit
     
    Private ColLeft() As Double
    Private Ligne As Long
    Private LigneEnCours As Long
    Private Colonne As Byte
    Private Enable_Events As Boolean
     
    '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    Private Const COLUMN_WIDTH As String = "50 pt;50 pt; 100 pt; 50 pt; 35 pt" 'A ADAPTER
    Private Const NB_LIGNES_DISPLAYED As Byte = 8                              'A ADAPTER
    Private Const NB_COLONNES As Byte = 5                                      'A ADAPTER
    '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
     
    Private Sub ComboBox1_Click()
        LigneEnCours = ComboBox1.ListIndex
        If Enable_Events = False Then SendKeys "%{Down}"
    End Sub
     
    Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        Enable_Events = True
            With ComboBox1
                If KeyCode = 9 Then
                    Colonne = Colonne + 1
                    If Colonne > NB_COLONNES - 1 Then
                        Colonne = 0
                        .Text = ""
                        Ligne = Ligne + 1
                        If Ligne >= NB_LIGNES_DISPLAYED Then .AddItem
                    End If
                End If
                .List(Ligne, Colonne) = .List(Ligne, Colonne) & Chr(KeyCode)
            End With
        Enable_Events = False
    End Sub
     
    Private Sub ComboBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim i As Long, rep As Integer
     
        If Button = 1 Then      'clic gauche
            For i = UBound(ColLeft) To LBound(ColLeft) Step -1
                If X >= ColLeft(i) Then
                    ComboBox1.TextColumn = i + 1
                    Exit For
                End If
            Next
            ComboBox1.SetFocus
            SendKeys "%{Down}"
        ElseIf Button = 2 Then  'clic droit
            rep = MsgBox("Voulez-vous supprimer cet Item?", vbYesNo + vbQuestion)
            If rep = vbYes Then ComboBox1.RemoveItem (LigneEnCours)
        End If
    End Sub
     
    Private Sub UserForm_Activate()
    Dim i As Long, Temp
     
        Enable_Events = True
            With ComboBox1
                For i = 1 To NB_LIGNES_DISPLAYED: .AddItem: Next i
                .ColumnCount = NB_COLONNES
                .ColumnWidths = COLUMN_WIDTH
                Temp = Split(Replace(COLUMN_WIDTH, " pt", ""), ";")
                ReDim Preserve ColLeft(UBound(Temp))
                ColLeft(0) = 0
                For i = 1 To UBound(Temp)
                    ColLeft(i) = ColLeft(i - 1) + Temp(i - 1)
                Next i
                .DropDown
                .ListRows = NB_LIGNES_DISPLAYED
            End With
        Enable_Events = False
    End Sub
    La ComboBox se remplit au fur et à mesure des saisies.
    La touche TAB permet de passer d'une colonne à la suivante.
    Lorsque l'on arrive au bout de la ligne, cette même touche TAB fait aller à la ligne suivante.
    Un clic gauche sélectionne l'item choisi (ligne ET colonne).
    Un clic droit supprime la ligne.

    C'est très incomplet, il convient de travailler davantage le KeyDown et aussi de permettre de modifier.
    Mais bon, comme le résultat n'est pas tip top, je le laisse en l'état...
    Cordialement,
    Franck

  9. #49
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Re-Bonjour,

    Citation Envoyé par unparia Voir le message
    En remettant les pieds sur terre, on aboutit à du bien plus simple et léger :
    - une textbox placée en dessous de la listbox
    - au clic sur l'un des éléments de la listbox -->> le texte de cet élément est copié sur la textbox
    - au change de la textbox, l'élément de la listbox prend la valeur modifiée dans la textbox
    Tout cela est extrêmement facile à mettre en oeuvre et plus que largement suffisant et efficace.
    Jacques,
    J'ai repris ton idée et fais du "un peu plus lourd que prévu", mais j'ai souhaité que :
    > le nombre de colonnes soit dynamique
    > toutes les infos d'une même ligne puissent être modifiées ensembles.

    Mais nous voici maintenant avec un autre exemple de ListBox "modifiable".

    Attention : 3 modules sont nécessaires.
    1- Module de classe nommé ClasseTB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Public WithEvents TBox As MSForms.TextBox
     
    Private Sub TBox_Change()
    Dim Col&
     
        Col = Val(Split(TBox.Name, SEP)(1)) - 1
        Enable_Events = True
        maListe.List(maListe.ListIndex, Col) = TBox
        Enable_Events = False
    End Sub
    2- Un module standard Module1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public maListe As MSForms.ListBox
    Public MesTB() As ClasseTB
    Public Enable_Events As Boolean
     
    Public Const SEP As String = "¤"
    3- le module de l'UserForm
    Un Userform, avec juste dedans une listbox nommée ListBox1...
    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
    Option Explicit
     
    Private H As Double
    Private H_Liste As Double
    Private ListIndexEnCours As Long
    Private Feuille As Worksheet
    Private Rng As Range
     
    Private Const NOM_TEXTBOX As String = "newTB"
     
    Private Sub ListBox1_Click()
    Dim i As Long
        If Enable_Events Then Exit Sub
        For i = 0 To ListBox1.ColumnCount - 1
            Me.Controls(NOM_TEXTBOX & SEP & i + 1).Text = ListBox1.List(ListBox1.ListIndex, i)
        Next i
    End Sub
     
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim rep As Integer
        rep = MsgBox("Voulez-vous supprimer cette ligne?", vbYesNo + vbQuestion)
        If ListBox1.ListIndex > -1 Then
            If rep = vbYes Then maListe.RemoveItem (ListBox1.ListIndex)
            ListBox1.ListIndex = -1
            ListBox1.Height = H_Liste
            ListIndexEnCours = ListBox1.ListIndex
        End If
    End Sub
     
    Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 1 Then
            If ListBox1.Height = H_Liste Then ListBox1.Height = ListBox1.Height - H
            If ListBox1.ListIndex = ListIndexEnCours Then
                ListBox1.ListIndex = -1
                ListBox1.Height = H_Liste
                ListIndexEnCours = ListBox1.ListIndex
            Else
                ListIndexEnCours = ListBox1.ListIndex
            End If
        ElseIf Button = 2 Then
            If ListBox1.Height = H_Liste Then ListBox1.Height = ListBox1.Height - H
            ListBox1.AddItem
            Enable_Events = True
            ListBox1.ListIndex = ListBox1.ListCount - 1
            Enable_Events = False
        End If
    End Sub
     
    Private Sub UserForm_Activate()
        With ListBox1
            .ColumnCount = 7
            .ColumnWidths = "50;50;100;60;80;50;60"
            .RowSource = "Feuil1!A1:G206"
            .Width = 490
        End With
        Add_TextBox Me.ListBox1
    End Sub
     
    Private Sub Add_TextBox(Liste As MSForms.ListBox)
    Dim i As Long, TextB As Control, ColLeft() As Double, L#
     
        Set maListe = Liste
        H_Liste = maListe.Height
        With maListe
            If .RowSource <> "" Then Remove_RowSource
            ReDim ColLeft(.ColumnCount)
            ReDim MesTB(.ColumnCount - 1)
            ColLeft(0) = 0
            For i = 1 To .ColumnCount
                ColLeft(i) = Split(Replace(.ColumnWidths, " pt", ""), ";")(i - 1)
                Set TextB = Me.Controls.Add("forms.TextBox.1", NOM_TEXTBOX & SEP & i, True)
                Set MesTB(i - 1) = New ClasseTB
                Set MesTB(i - 1).TBox = TextB
                L = L + ColLeft(i - 1): H = TextB.Height
                TextB.Move .Left + L, .Top + .Height - TextB.Height, ColLeft(i), H
            Next i
        End With
    End Sub
     
    Private Sub Remove_RowSource()
    Dim Source As String, L As Double
     
        Enable_Events = True
        With maListe
            L = .Width
            If InStr(.RowSource, "!") > 0 Then
                Set Feuille = Worksheets(Split(.RowSource, "!")(0))
                Source = Split(.RowSource, "!")(1)
            Else
                Source = .RowSource
            End If
            .RowSource = ""
            Set Rng = Range(Source)
            .List = Range(Source).Value
            .Width = L
        End With
        Enable_Events = False
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    'en cas de rowsource initial : on modifie le Range affecté
        If Not Rng Is Nothing Then
            If Not Feuille Is Nothing Then
                Feuille.Range(Rng.Address).Value = ListBox1.List
            Else
                Rng.Value = ListBox1.List
            End If
        End If
    End Sub
    Clic gauche ==> fait "apparaître" les textbox remplis
    Clic gauche sur le même item ==> fait "disparaître" les textbox + désélectionne la ligne
    Changement dans un textbox ==> modifie la listbox en conséquence
    Double-clic ==> supprime la ligne
    Clic droit ==> ajoutes une ligne

    Il doit y avoir pas mal de choses à revoir, mais le début est pas trop mal...

    A++
    Amicalement,
    Franck
    Cordialement,
    Franck

  10. #50
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Salut à tous,

    Petite question, dans l'userform ci-dessous j'ai donc trois textbox et une listbox de trois colonnes en dessous

    Lorsque je click sur "Ajouter les élément de textbox sont transférer dans la listbox,
    Nom : Userform.PNG
Affichages : 211
Taille : 7,0 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click()
    Dim txtb As Controls
    If TextBox1 <> "" Or TextBox2 <> "" Or TextBox3 <> "" Then
    ListBox1.Visible = True
    UserForm1.ListBox1.AddItem (TextBox1 & TextBox2 & TextBox3)
    'Frame1.ScrollBars = 2
    End If
            TextBox1 = Null
            TextBox2 = Null
            TextBox3 = Null
    End Sub
    Le code listbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim rep As Integer
        If ListBox1.ListIndex = -1 Then Exit Sub
        rep = MsgBox("Voulez-vous supprimer la ligne sélectionnée?", vbYesNo + vbQuestion)
        If rep = vbYes Then
            ListBox1.RemoveItem (ListBox1.ListIndex)
        End If
    End Sub
    A l'ouverture du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
     ListBox1.ColumnCount = 3
     ListBox1.ColumnWidths = "50;50;50"
    ListBox1.Visible = False
    End Sub
    Comment dois-je faire si je veux transférer chaque donnée de la listbox dans une cellule excel afin de l'éditer svp ?

    Avez vous une solution svp ?

  11. #51
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    bonjour,
    j'ai posté dans les contributions cette discussion : Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe
    qui explique une autre façon d'utiliser un scroll
    "normalement" , le scroll fait "défiler" une frame avec 100 TextBox
    "l'autre façon" , le scroll fait "défiler" le contenu dans 3 TextBox

    dans la discussion "Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe" il y a ce shéma
    qui explique :
    comment schématiser au plus simple le mécanisme d'une "Liste Ecran" (unique) de 33 Lignes, dans laquelle on fait glisser un Tableau de 20000 Lignes
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  12. #52
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Salut mjpmjp,

    J'ai bien vu cela,

    Mais ce que je souhaite faire c'est transférer les donnée de la listbox (trois colonnes) vers une feuille excel,

    Aujourd'hui j'arrive à transférer cela dans une cellule, sauf que je ne sais pas comment répartir
    les données de la liste box en trois colonnes sur une feuilles sur plusieurs lignes les unes en dessous des autres.

    Pr contre je crois avoir une erreur, parce que dans ce code je ne suis pas sûr que les données de la textbox 1 vont dans la colonne 1 de la listbox et ainsi de suite.

    Voila ce que je cherche à faire.

    Vous savez si cela est possible svp ?

  13. #53
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Salut,

    Voilà ce que j'ai trouvé (mais j'ai un problème avec ça):

    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
    Private Sub CommandButton1_Click()
    Dim col As Integer
    If TextBox1 <> "" Or TextBox2 <> "" Or TextBox3 <> "" Then
    ListBox1.Visible = True
     
    UserForm1.ListBox1.AddItem
    ListBox1.List(col, 0) = TextBox1
    ListBox1.List(col, 1) = TextBox2
    ListBox1.List(col, 2) = TextBox3
     
    End If
            TextBox1 = Null
            TextBox2 = Null
            TextBox3 = Null
    End Sub
    Le problème que je rencontre avec ce code, c'est que à chaque fois que je valide les données de textbox pour qu'elles s'insèrent dans la listbox,
    Les précédentes données de listbox disparaissent et seuls les nouvelles restent.

    Ce qui est étrange parce que dans le précédent code j'avais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm1.ListBox1.AddItem (TextBox1 & TextBox2 & TextBox3)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UserForm1.ListBox1.AddItem
    ListBox1.List(col, 0) = TextBox1
    ListBox1.List(col, 1) = TextBox2
    ListBox1.List(col, 2) = TextBox3
    et les données s'ajoutaient les unes au dessous des autres.

    Avez-vous une solution à ça svp ?

  14. #54
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Salut,

    Je reviens encore une fois;

    J'ai mit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UserForm1.ListBox1.AddItem
    col = ListBox1.ListCount - 1
    ListBox1.List(col, 0) = TextBox1
    ListBox1.List(col, 1) = TextBox2
    ListBox1.List(col, 2) = TextBox3
    Et je crois que ça fonctionne.

    Par contre je ne sais pas transférer les trois colonnes de la listbox dans trois colonnes d'une feuille excel.

    Vous savez faire svp ?

  15. #55
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Salut,

    Quelqu'un peut-il me dire pourquoi le cde ci-dessous ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CalculSomme()
     
      If TextBox3 = "" Or TextBox2 = "" Then
      Me.TextBox4.Value = ""
      ElseIf TextBox3 <> "" And TextBox2 <> "" Then
      Me.TextBox4.Value = (TextBox2.Value * Me.TextBox3.Value)
        End If
    End Sub
    Pourtant je met bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox4_Change()
    CalculSomme
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox3_Change()
    CalculSomme
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox2_Change()
    CalculSomme
    End Sub
    Je ne comprend pas ce qui manque, avez vous une piste svp ?

  16. #56
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub CalculSomme()
        If Me.TextBox3.Value <> "" And Me.TextBox2.Value <> "" Then
            Me.TextBox4.Value = (Val(Me.TextBox2.Value) * Val(Me.TextBox3.Value))
        Else
            Me.TextBox4.Value = ""
        End If
    End Sub
    pour la personne qui met des -1 (qui ne doit pas tout comprendre) voila une belle image

    Nom : Capture.JPG
Affichages : 170
Taille : 16,3 Ko

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  17. #57
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Génial ça fonctionne.

    Merci.

  18. #58
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Petite question,

    est-il possible de faire apparaitre le résultat sans avoir besoin de cliquer sur "commandboutton1" ?

    Que la Textbox 4 affiche le résultat au fur et à mesure que l'on saisisse les textbox 2 et 3 ?

    J'ai essayé de mettre le résultat dans un "UserForm_Initialize" mais ça ne fonctionne pas.

    Savez vous par quoi je doit passer svp ?

  19. #59
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    bonjour,
    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
     
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Me.TextBox3.Value = "" Then
            Me.TextBox3.SetFocus
        Else
            Call CalculSomme
        End If
    End Sub
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Me.TextBox2.Value = "" Then
            Me.TextBox2.SetFocus
        Else
            Call CalculSomme
        End If
    End Sub
    si ok clique résolue

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  20. #60
    Membre régulier
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Points : 87
    Points
    87
    Par défaut
    Merci pour tout.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. UserForm, TextBox & Controle de saisie
    Par wipMan dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 26/06/2013, 11h35
  2. [XL-2010] userform multipage objet
    Par pilounet54 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/08/2012, 08h21
  3. [XL-2010] blocage du userform textbox
    Par tompom3108 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/04/2012, 15h56
  4. userform --> textbox valeur par défaut changeante
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/03/2008, 09h21
  5. [VBA-E] userform TextBox
    Par mulanzia2003 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/03/2006, 09h18

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