XL 2016 listbox vers uderform

LJII

XLDnaute Nouveau
Bonjour a tous,

J'ai plusieurs soucis avec un fichier crée ! j'ai passé des jours a éplucher les codes sur les différents forums a regarder des vidéos de listbox je n'ai toujous pas les solutions a mes problèmes

1er : Formulaire de saisie basique via UserForm, il incrémente automatiquement le numéro de "dossier" suivant max +1 mais lorsque il le reporte en colonne B il le met en texte et il ne le reconnait pas a la prochaine saisie ! Comment forcé le format j'ai essayé plusieurs chose rien n'y fait l'affichage lui fonctionne ..


J'ai dans un premier temps fait cela pour déterminer le nombre :
Me.Label11.Caption = Application.WorksheetFunction.Max(Range("NLIGNES")) + 1
Puis a la validation cela :
ActiveCell.Offset(0, 0) = Me.Label11 'NUMERO DE LIGNE




2eme :
J'ai crée pour la recherche des dossiers une listBox qui fonctionne bien, sur deux critères possible, mais pas simultané Nom ou Ref.
Je ne sais pas comment exclure de cette liste les dossiers dont le Solde serait a 0... si c'est possible ??


3eme : Le plus dur pour la fin, a partir de cette listbox qui fonctionne , le double clic ouvre un nouveau formulaire a compléter mais je souhaite conservé quelle ligne j'ai sélectionné "choix", et avec cela rapatrié les donnée déjà présente sur la lignes dans le formulaire en couleur, et les nouveau champs a remplir, afin de pouvoir les y inscrire egalement sur la bonne ligne ..... je sèche complet !

je vous remercie par avance tous pour vos idées vos réponse et espérons vos solutions !

:) je joint mon fichier a toute fin utile et si çà peu en aidé d'autre lors de la création !
 

Pièces jointes

  • TABLEAU DE SUIVI.xlsm
    80.4 KB · Affichages: 1
Solution
re
j'ai fait une petite erreur d'index
il fonctionnera mieux comme ça
demo.gif

patricktoulon

XLDnaute Barbatruc
Bonjour
Vous travailler avec un tableau structuré
apprenez à travailler avec ;)

1° le formulaire peut très bien se placer au centre de la fenêtre Excel tout seul(voir startupposition=centerOwner) pas la peine de calculer

2°les textbox renvoie du texte donc tout ce qui est numérique y compris date doit être converti

3°c'est un tableau structuré travaillez avec lui en tant que tel

4° il serait utile de mettre une vérif (control dument rempli)

le code complet de votre petit formulaire
VB:
Option Explicit

Private Sub UserForm_Initialize(): INIT: End Sub

'sub de réinitialisation du formulaire
Sub INIT()
   Dim CtrL
   Me.Label11.Caption = Application.WorksheetFunction.Max(Range("NLIGNES")) + 1
    For Each CtrL In Me.Controls
        If TypeOf CtrL Is TextBox Then CtrL = ""
    Next
End Sub
Function Verif() As Boolean
    Verif = TextBox9 <> "" And TextBox10 <> "" And TextBox2 <> "" And TextBox3 <> "" And TextBox5 <> "" And TextBox6 <> "" And TextBox7 <> ""
End Function
'BOUTON VALIDER
'On affecte les valeur du formulaire a la base de donnée
Sub CommandButton1_Click()
    If Not Verif Then MsgBox " Veuillez remplir tout les champs SVP" & vbCrLf & "et/ou vérifier le type de donnée entré" & vbCrLf & vbTab & vbTab & "merci": Exit Sub
    With Range("BASEDD").ListObject.ListRows.Add.Range
        .Cells(1) = Val(Me.Label11)    'NUMERO DE LIGNE
        .Cells(2) = CDate(Me.TextBox9.Value)  'DATE
        .Cells(3) = Me.TextBox10.Value  'CENTRE
        .Cells(4) = Me.TextBox2.Value  ' NOM
        .Cells(5) = Me.TextBox3.Value  'PRENOM
        .Cells(6) = Me.TextBox8.Value  'DECOMPTE
        .Cells(7) = Me.TextBox5.Value  'NUMERO TIERS
        .Cells(8) = Val(Replace(Me.TextBox6.Value, ",", "."))    'MONTANT M
        .Cells(9) = Val(Replace(Me.TextBox7.Value, ",", "."))  'MONTANT A
    End With
    UserForm_Initialize
End Sub

'BOUTON ANNULER
Private Sub CommandButton2_Click(): Unload Me: End Sub

'DATE
Private Sub TextBox9_Enter()
    Me.TextBox9.BackColor = RGB(255, 0, 0)
    CALENDRIER.Show
    Me.TextBox9.BackColor = RGB(255, 255, 255)
End Sub
;)
 

LJII

XLDnaute Nouveau
Bonjour
Vous travailler avec un tableau structuré
apprenez à travailler avec ;)

1° le formulaire peut très bien se placer au centre de la fenêtre Excel tout seul(voir startupposition=centerOwner) pas la peine de calculer

2°les textbox renvoie du texte donc tout ce qui est numérique y compris date doit être converti

3°c'est un tableau structuré travaillez avec lui en tant que tel

4° il serait utile de mettre une vérif (control dument rempli)

le code complet de votre petit formulaire
VB:
Option Explicit

Private Sub UserForm_Initialize(): INIT: End Sub

'sub de réinitialisation du formulaire
Sub INIT()
   Dim CtrL
   Me.Label11.Caption = Application.WorksheetFunction.Max(Range("NLIGNES")) + 1
    For Each CtrL In Me.Controls
        If TypeOf CtrL Is TextBox Then CtrL = ""
    Next
End Sub
Function Verif() As Boolean
    Verif = TextBox9 <> "" And TextBox10 <> "" And TextBox2 <> "" And TextBox3 <> "" And TextBox5 <> "" And TextBox6 <> "" And TextBox7 <> ""
End Function
'BOUTON VALIDER
'On affecte les valeur du formulaire a la base de donnée
Sub CommandButton1_Click()
    If Not Verif Then MsgBox " Veuillez remplir tout les champs SVP" & vbCrLf & "et/ou vérifier le type de donnée entré" & vbCrLf & vbTab & vbTab & "merci": Exit Sub
    With Range("BASEDD").ListObject.ListRows.Add.Range
        .Cells(1) = Val(Me.Label11)    'NUMERO DE LIGNE
        .Cells(2) = CDate(Me.TextBox9.Value)  'DATE
        .Cells(3) = Me.TextBox10.Value  'CENTRE
        .Cells(4) = Me.TextBox2.Value  ' NOM
        .Cells(5) = Me.TextBox3.Value  'PRENOM
        .Cells(6) = Me.TextBox8.Value  'DECOMPTE
        .Cells(7) = Me.TextBox5.Value  'NUMERO TIERS
        .Cells(8) = Val(Replace(Me.TextBox6.Value, ",", "."))    'MONTANT M
        .Cells(9) = Val(Replace(Me.TextBox7.Value, ",", "."))  'MONTANT A
    End With
    UserForm_Initialize
End Sub

'BOUTON ANNULER
Private Sub CommandButton2_Click(): Unload Me: End Sub

'DATE
Private Sub TextBox9_Enter()
    Me.TextBox9.BackColor = RGB(255, 0, 0)
    CALENDRIER.Show
    Me.TextBox9.BackColor = RGB(255, 255, 255)
End Sub
;)

Merci bcp
En effet au départ je travaillé avec le tableau structuré , même pour la listbox,
Mais je n'ai jamais réussi a faire fonctionné l'option de recherche :( alors j'ai laissé tombé et je suis passé sur du déstructuré !
Je vais prendre compte ton code pour remettre sur le tableau , avant tout c'est de le comprendre :)
Sans compréhension le copier ne me servira pas si j'ai besoin d'y revenir :)

Pour Autant mes problèmes reste entier car ce n'est pas ce ce formulaire que j'ai des soucis réellement.

C'est sur celui de recherche et modification !
a partir du doule clic de la ListBox


3eme : Le plus dur pour la fin, a partir de cette listbox qui fonctionne , le double clic ouvre un nouveau formulaire a compléter mais je souhaite conservé quelle ligne j'ai sélectionné "choix", et avec cela rapatrié les donnée déjà présente sur la lignes dans le formulaire en couleur, et les nouveau champs a remplir, afin de pouvoir les y inscrire egalement sur la bonne ligne ..... je sèche complet !

Merci
 

LJII

XLDnaute Nouveau
Pour être plus précis :

Sur ma Listbox qui elle fonctionne très bien même si j'aimerai exclure ligne donc les montant sont a 0 ! mais c'est de l’ordre de l'amélioration !
J'ai donc ce code :

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'Selection du dossier a modifier
choix = ListBox1.ListIndex 'fixer le choix de la ligne ou le numéro sur la colonne 1 ! ne fonctionne pas !
Unload Me
MAJDOSSIER.Show
End Sub

L'objectif est de fixer la ligne sélectionné via " choix" , d'ouvrir le nouveau formulaire !
Dans ce nouveau formulaire il y aurai les données existantes dans la base de données nom prénom etc ,
ET des cases vide a remplir pour compléter le dossier :)

Mais comment dans ce formulaire trouver la ligne sélectionné " choix" dans la liste box par une variable ? ( mon point faible ) et comment rapatrié les données depuis la bases de donnée ! :(
Sachant que dans la listebox la colonne B est un numéro unique pas les autres donnée !
il faudrait je suppose fixé ce numéro , puis le rappeler pour trouver la ligne et colonne par colonne affécté au textbox ou label la valeur .
Dans ma tête c'est clair mais en VBA pas du tout :)

Mon premier travail ressemble a cela mais je suis conscient qu'il manque pas mal de chose :(

Private Sub UserForm_Initialize()

i = choix + 7 ou i= choix si le numéro de dossier ( unique peux etre pris directement )

Me.txtLIG.Caption = Range("B" & i) ' numéro de ligne ( unique en colonne B) a rapatrié

txtDATE = Range("C" & i).Value ' Date a recup en C ligne
txtUGE = Range("D" & i).Value
txtNOM = Range("E" & i).Value
txtPRE = Range("F" & i).Value
txtREF = Range("G" & i).Value
txtTIE = Range("H" & i).Value
txtMA = Range("K" & i).Value
txtAT = Range("L" & i).Value

End Sub

Merci a vous
(Ps si vous pouviez expliqué dans le code le cheminement que je le comprenne )
La compréhension et la clé :)
 

LJII

XLDnaute Nouveau
Mille merci j'ai revu mon tableau de base et mon formulaire avec ton code, que j'ai ré-adapté et c'est nickel !

Je comprend pas tout par contre c'est quoi cette partie ? le reste c'est OK
For Each CtrL In Me.Controls
If TypeOf CtrL Is TextBox Then CtrL = ""
Next

J'ai réussi a corrigé ma ListBox pour la pointé sur le tableau structuré !
ListBox1.List = Range("BaseDD").Value en masquant les colonnes inutile

Est ce que avec ça ont ne saurait pas lui dire que si dans la BaseDD si la colonne K ou la 9eme si la 1ere est 0 , est = a 0 alors il les prends pas ? :rolleyes:

Bon j'ai déjà avancé sur la partie la plus " simple" qui est encore mieux mais il faut maintenant que j'arrive a fixer la ligne que l'on selectionne avec le double clic pour alimenter le formulaire suivant !

:D
 

patricktoulon

XLDnaute Barbatruc
re
je t'ai fait un exemple qui fait tout ça et est fonctionnel
tu veux quoi de plus ?
le double clique fonctionne
il affiche le 2d userform avec les donné et le txtLIG a bien la ligne correspondante du tableau
parti de la tu peux tout faire
je rempli d'ailleurs le haut du formulaire avec les données
te reste plus qu'a taper le bas du formulaire et valider ca aussi ça marche
 

LJII

XLDnaute Nouveau
re
je t'ai fait un exemple qui fait tout ça et est fonctionnel
tu veux quoi de plus ?
le double clique fonctionne
il affiche le 2d userform avec les donné et le txtLIG a bien la ligne correspondante du tableau
parti de la tu peux tout faire
je rempli d'ailleurs le haut du formulaire avec les données
te reste plus qu'a taper le bas du formulaire et valider ca aussi ça marche
@patricktoulon
il doit y avoir un quiproquo :(
J'ai bien vu le code que tu a posté plus haut pour le module D'ajout et je t'en ai remercié il ma bien aidé !
A revoir ma base de donnée ! et a amélioré mon 1er formulaire ! avec bouton Choix 🤠.


Toutefois je n'ai pas vu de fichier si tu en a posté un 😵‍💫 ou le 2duserform fonctionne avec donnée tktLIG ??
Ton message precedent est de 10:41 ou tu me dit que tu va regarder le 2d USF !
 
Dernière édition:

LJII

XLDnaute Nouveau
Quel Travail, 🫡

J'ai repris tout ça en l'assimilant et l'adaptant au fur et a mesure :)
J'ai quelque question si je peux me permettre d'abuser de votre temps ?

J'ai modifié ma liste avec 3 bouton au lieux du double clic finalement
1 pour la mise a jour, un pour une impression
l’autre pour modifier les données initiale en cas d'erreur !

J'ai mis un msqbox dans le cas ou l'on clic sur un de ces trois bouton sans sélection dans la listbox tout fonctionne enfin presque puisque me revoilà !

Si clic sans sélection ! j'ai le message, ensuite je sélectionne un dossier, je rentre dans l'usf suivant modif ou MAJ qu'importe je fait ma modif mais quand je sort ou je que valide la saisie c'est le drame.

Bizarre il a bien ouvert le dossier pourtant et tout il valide bien les donnée !!

Concerne l'usf de la listbox :/ visiblement



1707997857941.png


Private Sub BTNMAJ_Click() ' MISE A JOURS DU VIN

If ListBox1.ListIndex = -1 Then
MsgBox "Veuillez selectionner un dossier !" & vbLf & "Merci", vbInformation

Unload Me
RECHERCHEDATA.Show
End If

With ListBox1
ligne = .List(ListBox1.ListIndex, 0) ici est l'erreur me dit il !
End With
Unload Me

With MAJDOSSIER: .ligneX = ligne: .Show: End With

End Sub


Encore merci :)
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 270
Membres
103 168
dernier inscrit
isidore33