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, TexBox, données vers une Liste


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut Userform, TexBox, données vers une Liste
    Bonjour,
    j'ai petit problème,
    j'ai crée un UserForm dans le quel il y a un TexBox, et un CommandBotton,
    et dans ma page excel, feuil1, j'ai créer un Liste (grâce à Données/Liste/Créer une liste). donc voila ou j'en suis,
    j'aimerai lorsque j'introduit une donné X dans mon TexBox et que je valide grâce au CommandBotton, que celle-ci se mette dans ma liste (sachant que ma liste peut être situé n'importe où dans la Feuil1)

    ça parait simple, mais je galère depuis un moment , car je ne connaît pas les propriétés de la liste pour y introduire X

    Merci à celui ou celle, qui parviendra à résoudre se petit problème....

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir Skorpio,

    C'est le n'importe où qui peut être gênant. Votre liste a la bougeotte ?
    Je plaisante (à peine).
    Si par exemple dans la cellule qui précède immédiatement la 1ère de votre liste il y a un titre bien précis, il y a sans doute une possibilité.

    Amicalement.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    Merci Jacques Jean,

    Mais comment se serait possible, même si ma liste n'aurait pas la bougeot
    ce serait koi le code...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir Skorpio,

    J'ai testé une procédure qui fonctionne chez moi. Il me reste à trouver une solution pour initialiser une variable.

    Pour cela une question :

    votre liste fait référence à une plage de cellules sur une feuille ou vous avez entré les valeurs dans la fenêtre "Source".

    Je suis obligé d'arrêter maintenant, mais en fonction de votre réponse et si vous n'avez pas reçu d'autres réponses, je vois ça demain matin.

    Amicalement.

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par skorpio
    Merci Jacques Jean,

    Mais comment se serait possible, même si ma liste n'aurait pas la bougeot
    ce serait koi le code...
    Je n'ai plus 2003 sur mon poste.
    Mais, sauf erreur de ma part, Donnée/Liste ... crée une plage Nommée.
    Non ?
    Cela signifie qu'il y a un nom quelque part dasn ta feuille.
    Exact ?
    Imaginons que ce nom soit... MaListe.

    Tu pourrais avoir un code comme ceci :

    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
     
    Dim n1 as Long    '// N° de la première ligne de la plage
    Dim n2 as Long    '// Nombre de lignes de la plage
    Dim rng as Range '// définition de la plage de saisie
     
    '// Se positionner sur la bonne feuille
    LaFeuilleDeLaListe.select
    '// récupérer le n° de la première cellule de la plage MaListe
    n1 = Range("MaListe").range("A1").row
    '// récupérer le nombre de lignes de la plage MaListe
    n2 = Range("MaListe").Rows.count
    '// définition de la plage de saisie
    set rng= Cells(n2-n1+2,range("Maliste").range("A1").column)
    '// inscrire le texte
    rng.value=MaZoneDeText.Value
    '// renommer la plage
    thisworkbook.names.add "MaListe", "=" & Union(Range("MaListe"), rng).address (true, true, xlR1C1, true)

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    oui jacques jean,
    c'est une liste qui fait référence à une plage de cellules sur une feuille,
    j'ai fais données/liste/créer une liste

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    Merci Maxence,

    j'ai essayé ce que tu m'a donnée, mais il y a un problème au niveau de:

    n1 = Range("MaListe").Range("A1").Row

    Moi ma liste, s'appel "Liste1", et j'ai quand essayé avec celle-ci mais ça ne marche pas non plus...

    voici la macro qui ma permis de trouver la nom de ma liste peut-être que ça peut aider. En fait j'ai créer une liste mais ça ne me donné pas lé propriété de la liste, alors j'ai fais données/liste/redimensionner la liste et j'ai modifier ma liste et voila le code que ça me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro1()
     
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$E$1"), , xlNo).Name = _ "Liste1"
    Range("A1:E2").Select
    ActiveSheet.ListObjects("Liste1").Resize Range("$A$1:$D$2")
    Range("A3").Select
     
    End Sub

  8. #8
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    encore un truc maxence, moi ma zonedetexte, s'apel TextBox1, g même fais gaffe à ça et sa marche pas

  9. #9
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    à la place de tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListObjects("Liste1").Range

  10. #10
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    ok Maxence,
    voila c'que j'ai exactement, il y a un message erreur de compilation, Sub ou Function non définie par rapport à ListObjects

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CommandButton1_Click()
     
    Dim n1 As Long
    Dim n2 As Long
    Dim rng As Range
     
    Feuil1.Select
    n1 = ListObjects("Liste1").Range("A1").Row
    n2 = ListObjects("Liste1").Rows.Count
    Set rng = Cells(n2 - n1 + 2, ListObjects("Liste1").Range("A1").Column)
    rbg.Value = TextBox1.Value
    ThisWorkbook.Names.Add "Liste1", "=" & Union(ListObjects("Liste1"), rng).Address(True, True, xlR1C1, True)
     
    End Sub

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour Skopio et Maxence HUBICHE,


    Maxence HUBICHE a écrit :

    Je n'ai plus 2003 sur mon poste.
    Mais, sauf erreur de ma part, Donnée/Liste ... crée une plage Nommée.
    Non ?
    Non avec Excel 2000 à partir de Données, Validation puis Autoriser liste dans Source on peut :

    - soit choisir une plage de cellule (et uniquement sur la même feuille)
    - soit taper directement les données de la liste séparées par des ;

    C'est la raison pour laquelle j'avais posé la question à Skorpio :

    votre liste fait référence à une plage de cellules sur une feuille ou vous avez entré les valeurs dans la fenêtre "Source".
    Cela dit, la procédure que je viens d'écrire semble très bien fonctionner en la lançant manuellement, mais je bute sur une chose toute bête : la procédure insérée dans la feuille contenant la TextBox, ne veut pas s'exécuter à partir de la mise à jour de celle-ci.

    Il y a des moments où je me demande si je ne suis pas en train d'atteindre mon niveau d'incompétence.

    A toutes fins utiles voici le code que j'ai inséré dans un module et qui fonctionne chez moi (je reconnais qu'il peut être simplifié) :

    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
    Sub Maj_list()
    '1ère ligne de données pour la liste (modifier éventuellement)
    plst = 4
    'N° de colonne de données pour la liste (modifier éventuellement)
    cv = 1
    'Titre de colonne correspondant au N° ci-dessus
    ct = "A"
    Sheets("Feuil1").Activate
     
    txt1 = Sheets("Feuil1").TextBox1
     
    For i = plst To plst + 200
    txt2 = Cells(i, cv)
    If txt2 = "" Then
    dlst = i
    Exit For
    End If
    Next i
     
    Cells(dlst, cv) = txt1
    ad = "$" & ct & "$" & CStr(dlst)
     
             With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=$A$4:" & ad
            End With
     
    End Sub
    Dernière modification par Invité ; 05/06/2007 à 15h31.

  12. #12
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    merci kan même Jacques jean

    Moi lorsque j'introduit une donné dans mon textBox lui même dans un Userform ainsi qu'un commandButton, et bien je parvien lorsque je clic sur ok à l'introduire dans la liste (que si elle est situé dans un endroit bien précis) dommage...

  13. #13
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n1 = Activesheet.ListObjects("Liste1").Range("A1").Row
    n2 = Activesheet.ListObjects("Liste1").Rows.Count

  14. #14
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    pour agrandir ta liste, tu pourras utiliser la méthode Resize de Listeobject

  15. #15
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    si quelqu'un trouve une solution je suis preneur...


    voici un exemple de ce que je souhaiterai avoir, si vous avez bien suivie depuis le début

    voir pièce jointe

    Merci Maxence, mais j'suis dégouté car même avec activeSheet devant sa marche pas

    je comprend pas car la ça devrait marcher!!!????
    Images attachées Images attachées  

  16. #16
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Bon, allez...
    J'ai testé de mon côté, modifié en fonction de tes saisies d'écran.

    Voici un code testé, et vérifié, et qui fonctionne.

    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
     
    Private Sub CommandButton1_Click()
     
        Dim n1 As Long                  '// première ligne de la liste
        Dim n2 As Long                  '// dernière ligne de la liste
        Dim c1 As Long                  '// première colonne de la liste
     
        Const NB_COLONNES As Long = 4   '// nombre de colonnes
     
        Dim rng As Range                '// première cellule vide sous la liste
     
        Worksheets("Feuil1").Select     '// aller sur la feuille Feuil1
     
        '// récupérer les 3 valeurs inconnues de positionnement de la liste
        n1 = ActiveSheet.ListObjects("Liste1").Range.Range("A1").Row
        n2 = ActiveSheet.ListObjects("Liste1").Range.Rows.Count
        c1 = ActiveSheet.ListObjects("Liste1").Range.Range("A1").Column
     
        '// définir la cellule vide
        Set rng = Cells(n2 - n1 + 2, c1)
     
        '// Remplir la ligne
        With rng
            .Value = "111"
            .Offset(0, 1).Value = "eee"
            .Offset(0, 2).Value = "eee"
            .Offset(0, 3).Value = "eee"
        End With
     
        '// redimensionner la liste
        ActiveSheet.ListObjects("Liste1").Resize Range(Cells(n1, c1), Cells(n2 - n1 + 2, NB_COLONNES - c1 + 1))
    End Sub

  17. #17
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup Maxence, ça déchire
    il y a une dernière petite question:
    c'est normal que lorsque j'ai une cellule active dans la liste(quand j'ai cliqué sur une cellule à l'intérieur de la liste) et que ensuite j'envoi le programme, cela saute des lignes???
    Alors que si j'ai selectionné n'importe quel cellule en dehors de la liste et bien ça marche correctement!!!

    et-il possible de faire marcher le code dans les 2 sens???

  18. #18
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Normal ? non.
    Mais, s'il n'y a que cela, tu sélectionnes ailleurs, et puis c'est marre !

    :lol

  19. #19
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 64
    Points
    64
    Par défaut
    Encore un grand merci à toi Maxence,
    Votre code m'est très utile...
    Mais, car il y a toujours un "mais", vu que vous avez bien compris mon problème, j'ai une question,
    Et-il possible de mettre la liste ou je veux sur ma feuille, je ne la veut pas obligatoirement un haut à gauche de ma feuille(commencant par "A1")?

    Ce que je veux dire, c'est imaginons que je décide de mettre n'importe ou ma liste, je souhaiterai que les données s'introduise également dans la liste...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n1 = ActiveSheet.ListObjects("Liste1").Range.Range("A1").Row

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Extraire données numpy array vers une liste ?
    Par Ben20 dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 05/03/2015, 11h30
  2. Copier un fichier vers une liste donnée dans un fichier
    Par ptitjibus dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 13/12/2014, 21h46
  3. Réponses: 1
    Dernier message: 22/04/2014, 16h32
  4. Réponses: 2
    Dernier message: 20/04/2007, 10h48
  5. Réponses: 4
    Dernier message: 30/08/2006, 12h17

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