Form remplit automatiquement

Résolu
tiibo58000 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   - 30 avril 2015 à 14:28
Bonjour,

Je bute sur un problème concernant la génération automatique d'un Form
J'ai une liste de chantier avec:
"X"(selon si le chantier est sélectionné ou non), Numéro, Nom, Adresse, Budget. (Avec la possibilité d'avoir plusieurs lignes (plusieurs chantiers) avec le même numéro)
J'ai déjà créé un Form permettant de taper un Numéro de chantier et de le récupérer dans une variable NumChantier

A partir de ce Numéro, je souhaiterai créer automatiquement un Form m'affichant la liste de chaque chantier possédant ce Numéro, avec, devant chaque nom, une "CheckBox" me permettant de sélectionner/désélectionner le chantier.

Ainsi, si UN seul chantier correspond au Numéro tapé, j'aurai un Form avec 1 CheckBox et 1 TextBox (me permettant de valider ou non la sélection du dit chantier), mais si j'ai 20 chantiers avec ce Numéro, j'aurai un Form avec 20 CheckBox et 20 TextBox (me permettant d'en sélectionner/désélectionner 1 ou plusieurs)

J'espère avoir été clair

Merci d'avance

3 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Bonjour,

Plutôt que d'utiliser x textbox et x checkbox, pourquoi ne pas utiliser une listbox multiselect?
0
tiibo58000 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Effectivemennt, cela pourrai également fonctionné.
Il faudrai que j'essaie d'alimenter la ListBox Multiselect avec les valeurs de mon tableau. A travailler ! Merci
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Un exemple tout simple, mais efficace.
0
tiibo58000 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
Une dernière chose:
Même si je n'ai pas bien compris comment marche la variable "valeurs", j'aimerai savoir, une fois un certain nombre d'items de la liste sélectionnés, comment faire le chemin inverse, c'est à dire par exemple, mettre en sur-brillant rouge les lignes donc j'ai sélectionné les items?
0
tiibo58000 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Trop cool ! j'adapte ça à mon problème !
Merci beaucoup
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Si j'ai bien compris ta seconde question, tout se e dans le CommandButton_Click :
Private Sub CommandButton1_Click()
    Dim i As Integer, Valeurs As String, t As Integer
    'pour i = 0, la ligne correspondante est la ligne 2 dans le classeur
    'donc pour "colorier" les lignes, il suffit de colorer les lignes i+2
    'il convient toutefois, avant de colorer, de "décolorer" tout
    Columns(1).Cells.Interior.ColorIndex = xlNone
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            Valeurs = Valeurs & vbCrLf & ListBox1.List(i) & " - " & ListBox1.List(i, 1)
            t = t + 1
            '"coloration"
            Cells(i + 2, 1).Interior.ColorIndex = 3
        End If
    Next i
    Valeurs = "Vous avez sélectionnés " & t & " Chantiers : " & Valeurs
    MsgBox Valeurs
End Sub


Pour la variable Valeurs, il s'agit d'un String, une chaîne de caractères.
vbcrlf est le caractère pour er à la ligne,
ListBox1.List(i) est la première colonne de ma listbox
ListBox1.List(i, 1) la seconde colonne.
On cherche à cumuler les lignes dans une même variablme, donc il faut conserver sa valeur et y ajouter les nouvelles valeurs.
Du coup, Valeurs = Valeurs (anciennes lignes déjà rentrés) + vbcrlf (age à la ligne) + ListBox1.List(i) & " - " & ListBox1.List(i, 1) (nouvelles données).

Au premier age, ce code va faire un age à la ligne puis entrer les premières valeurs. Cela nous convient car on peut ajouter sur cette première "ligne" vide le message "Vous avez sélectionnés " blablabla.

C'est + clair?

Ne pas oublier, là c'est un bête exemple, de référencer la feuille contenant les données. En effet, puisque tu es dans un Form, il convient de le préciser pour le cas ou l'utilisateur aurait une autre feuille sélectionnée...
Dans ce cas, privilégier l'écriture suivante :
Private Sub CommandButton1_Click()
    Dim i As Integer, Valeurs As String, t As Integer
    'pour i = 0, la ligne correspondante est la ligne 2 dans le classeur
    'donc pour "colorier" les lignes, il suffit de colorer les lignes i+2
    'il convient toutefois, avant de colorer, de "décolorer" tout
With Sheets(1)
    . Columns(1).Cells.Interior.ColorIndex = xlNone
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            Valeurs = Valeurs & vbCrLf & ListBox1.List(i) & " - " & ListBox1.List(i, 1)
            t = t + 1
            '"coloration"
            .Cells(i + 2, 1).Interior.ColorIndex = 3
        End If
    Next i
    Valeurs = "Vous avez sélectionnés " & t & " Chantiers : " & Valeurs
    MsgBox Valeurs
End With
End Sub

A noter : en cas d'utilisation de With End With, il convient de rapprocher les objets concernés en plaçant un point devant.
Ainsi :
Sheets(1).Range("A1")

devient
With Sheets(1)
.Range("A1")
End With

🎼 Cordialement,
Franck 🎶
0
tiibo58000 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Re-bonjour
Merci pour toutes ces explications et ces précisions.
Entre temps, j'ai trouver une solution à mon problème.

Etant donné quand j'ai une colonne (dans mon tableau et dans ma List.Multiselect) où les valeurs sont uniques, j'ai fait ceci:




Dim i As Integer, Valeurs As String, t As Integer, ref As String
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
'Création d'une variable ref pour stocker la valeur unique dans la colonne 3 de ma list, et la rechercher dans mon tableau
ref = Me.ListBox1.List(i, 3)
Cells.Find(What:=ref, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate

ActiveCell.Select
ActiveCell.EntireRow.Select

With Selection.Interior.ColorIndex = 3
End with
...
End if


J'arrive au résultat que je voulais avec cette méthode, mais je garde la tienne au cas où!

Merci encore !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Essaie en remplaçant :
Cells.Find(What:=ref, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False).Activate

            ActiveCell.Select
            ActiveCell.EntireRow.Select

                With Selection.Interior.ColorIndex = 3

par :
Cells.Find(What:=ref, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False).EntireRow.Interior.ColorIndex = 3
0
tiibo58000 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Super ! Ça marche nickel merci !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759 > tiibo58000 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
de rien.
A+
0