Selection(souris) + scrollbar + affichage

[Résolu]
Signaler
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
salut a tous et toutes

Voila je voudrais avoir une base de donnée existante et je voudrais selectionnais à l'aide de la souris plusieurs de ses parametres pour pouvoir les afficher ulterieurement .Pour cela je me sert d'un textbox (ds lequel il y aura toutes mes données à selectionner )et un scrollbar qui me permettra de les afficher et je voudrais ensuite pouvoir permettre à l'utilisateur d'en ajouter .

Pouvez vous me lancer une idée j'ai du mal à démarer voir un petit exemple.
 
merci au fait je fait du vba sous excel et je débute dans la prog

16 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Voici comment faire :

Option Explicit

Private Sub ListBox1_Click()
    TextBox1.Text = ListBox1.Text
End Sub

Private Sub UserForm_Initialize()
    With ListBox1
        .AddItem "sboub"
        .AddItem "sboub2"
        .AddItem "sboub3"
        .AddItem "sboub4"
        .AddItem "sboub5"
    End With
End Sub


~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Pour amener du texte dans un contrôle situé sur un autre UserForm, c'est pareil, à part qu'il faut précéder l'instruction par le nom du contenair (donc le nom du UserForm).

Exemple :
Private Sub ListBox1_Click()
    UserForm2.TextBox1.Text = ListBox1.Text
End Sub

Ensuite, si tu veux ajouter dans le textbox des lignes de données, qui s'insèrent au fur et à mesure, il faut que tu sélectionnes le TextBox en question (en mode création) et que tu lui mettes la propriété MultiLine à True, puis, par code, il faut faire :

Private Sub ListBox1_Click()
    If UserForm2.TextBox1.Text = vbNullString Then
        UserForm2.TextBox1.Text = ListBox1.Text
    Else
        UserForm2.TextBox1.Text = UserForm2.TextBox1.Text & _
         vbCrLf & ListBox1.Text
    End If
End Sub

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
fait un test afin de savoir si le testbox de destination contient ou non une valeur :

If TextBox1.Text = vbNullString Then
    TextBox1.Text = ListBox1.Text
Else
    If TextBox2.Text = vbNullString Then

        TextBox2.Text = ListBox1.Text
    Else
       Etc...
    End If
End If

Sinon, fait une boucle de tes objets,
Dim MyCtl As Control

For Each MyCtl In UserForm2.Controls
    If TypeOf(MyCtl) Is TextBox Then
       If MyCtl.Text = vbNullstring Then
          MyCtl.Text = ListBox1.Text: Exit For
       End If
    End If
Next MyCtl

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Je t'ai mis les commentaires pour expliquer ce que faisait le code :

If TextBox1.Text = vbNullString Then
' Si le text de TextBox1 est
vide alors
    TextBox1.Text = ListBox1.Text
'    On insère le texte de la ListBox
Else
' sinon (on vérifie le reste, en cascade)
    If TextBox2.Text = vbNullString Then
' Si le text de TextBox2 est
vide alors
        TextBox2.Text = ListBox1.Text
'    On insère le texte de la ListBox
    Else
'    sinon
       Etc...
    End If
End If

Sinon, fait une boucle de tes objets,
Dim MyCtl As Control

For Each MyCtl In UserForm2.Controls
' pour tous les controles dans le UserForm2
    If TypeOf(MyCtl) Is TextBox Then
'    Si le type du controle
actuel est un TextBox, alors
       If MyCtl.Text = vbNullstring Then
'       si le texte du TextBox
en cours est vide alors
          MyCtl.Text = ListBox1.Text: Exit
For
'          le controle recoit le texte de la
Listbox et on sors de la boucle
       End If
    End If
Next MyCtl
' s'il n'y a pas eu de sortie de la boucle, on choisi le controle
suivant

~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Et beh, t'as pas cherché loin...
Pour le typeof, c'est normal (enfin non, mais bon...) qu'il y ait une erreur, je l'ai mal écrit, je t'ai fait tout de tête mais il suffit de faire

If TypeOf MyCtl Is TextBox Then

Bref, voici la correction, car j'avais omis autre chose :

Dim MyCtl As Control

For Each MyCtl In Me.Controls
' pour tous les controles dans le UserForm2
    If TypeOf MyCtl Is MSForms.TextBox Then
'    Si le type du controle
actuel est un TextBox, alors
       If MyCtl.Text = vbNullString Then
'       si le texte du TextBox
en cours est vide alors
          MyCtl.Text = ListBox1.Text: Exit
For
'          le controle recoit le texte de la
Listbox et on sors de la boucle
       End If
    End If
Next MyCtl


~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique

(en rouge, c'est ce qui a changé)

</small>@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

je pense qu'il vaut mieux préférer l'utilisation d'une ListBox plutôt qu'un combobox.
Pour ajouter des données avec ce contrôle : ComboBox1.AddItem "Ce que tu veux"

Ensuite, tu parles de bases de données, voici comment exploiter les feuilles excel :
Choisir une feuille :
Sheets("nom feuille").Select
Une Cellule :
Range("A2").Select  Ou  Cells(2, 1).Select
Déterminer la dernière ligne utilisé à partir d'une cellule :
DerniereLigne = Range("A65536").End(xlUp).Row

Exemple de mix :
Admettons tu as des valeurs dans la colonne A (une dizaine, mais la dernière ligne, peut changer) donc il faut faire ceci :

Dim i As Integer
For i = 1 To Range("A65536").End(xlUp).Row
    ComboBox1.AddItem Cells(i, 1).Value
Next i

Bon courage ;)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Arf, j'ai élangé les contrôles (vient de me réveiller...)
ma 1ere ligne : l'utilisation d'une ListBox plutôt qu'un <strike>combobox</strike>   textbox.
dans mon code :
    ListBox1  <strike>ComboBox1</strike>.AddItem Cells(i, 1).Value

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007

En fait la base de donnée c'est moi qui la rentre au préalable mais aprés qui pourra etre améliorer par l'utilisateur.
c'est a dire je veux une fenetre avec :
poids
taille
longueur
etc...  que je rentre au préalable et aprés une fonction qui me permet d'ajouter d'autre données
lorsque je clique sur poids par exemple il me l'a rentre dans une autre text box  

j'éssaye d'etre clair mais ça ne l'ai po pour moi lol
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Alors pour saisir les données dans un ListBox, voir code plus haut ^^
Ensuite on pourrait imaginer un TextBox en plus de la listbox sur ton UserForm, avec un Bouton "ajouter".
Quand la personne clique sur Ajouter, la données s'insère dans la ListBox et dans la feuille de données. Pour cela, il faut utiliser l'évènement Click du CommandButton (donc le bouton ajouter) :

Private Sub CommandButton1_Click()
    ListBox1.AddItem TextBox1.Text
    Cells(Range("A65536").End(xlUp).Row + 1, 1).Value = TextBox1.Text
End Sub

La première instruction rajoute dans la ListBox ce qui est saisie dans le TextBox
La seconde rajoute dans la feuille d'excel ce qui est dans TextBox, en recherchant la dernière cellule utilisée et en lui raoutant 1

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007

je vais etre chiant mais en fait je ne m'occupe po d'excel pour le moment je n'ai rien dans excel

les données je les rentre à la fin de mon programme mais qui la a rien a voir .

je veux tout simplement cliquer sur une ligne ds la ligne box ,
ce qui va le mettre en surbrillance
et ensuite cette element dans la listbox sera envoyé dans une textbox 

tu vois le truc je sais comme je dis souvent il fait que j'explique longtemps pour que les gens comprenne lol
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007

c'est ça mais je voudrais dans textbox1
sboub
sboub1
sboub3

qd je clique sur les différents sboub ( :-) )
et aprés me les amener sur une autre userform .
 merci pour ton aide précieuse
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007

pardon
sboub dans un textbox de l'autre userform
sboub1 dans textbox1 de l'autre userform


sboub3 dans textbox2 de l'autre userform
merci encore
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007

nickel mais pour inserer chacune données selectionner
sboub
sboub1
sboub3

dans trois autre textbox différentes ( une avec sboub, l'autre avec sboub1 et la derniere sboub3)on fait comment ?
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007

tu peux m'expliquer ton algo stp ?
je ne comprend po tout
les deux ce sera toujours intérréssant
et au fait dans le premier on reste toujours dans la meme boucle de if?


 
Messages postés
67
Date d'inscription
dimanche 25 avril 2004
Statut
Membre
Dernière intervention
5 février 2007

pkoi il ne prend po le " .text" et le "TypeOf(MyCtl)" je comprends po il ne marche po ton code sous vba il me marque des erreurs
 
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
salut,
s'il y a des erreurs, tu ne risques pas d'avoir d'autres avis puisque tu as validés les posts...

la validation sert entre autres à clore le sujet en indiquant quelle(s) réponse(s) correspond(ent) au problème.

NB : merci d'éviter le langage SMS

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp