Userform modifier

Bonjour

Ok le fichier est mieux là.

Une petite question concernant le matricule, est-ce que les élèves ont un matricule par défaut dans l'école ou est-ce que la colonne A ne sert qu'à ajouter une référence qui est incrémentée à chaque nouvelle donnée introduite ?

Cette question parce qu'à l'ouverture de l'USF, on peut attribuer le numéro de matricule automatiquement. Exemple dans votre fichier à l'ouverture on aurait le chiffre 17 dans la textbox1.

bonjour

la colonne A ne sert qu'à ajouter une référence mais si une idée tu peut le modifier

si possible pour je veut que l'ouverture de l'USF soit en premier

Merci

Dans l'USF eleves, modifiez comme suit :

1. Dans la Private Sub UserForm_Initialize() : ajoutez ces lignes juste avant le END SUB

TextBox1 = WorksheetFunction.Max(Worksheets("BDD").Range("A:A")) + 1
TextBox2.SetFocus

2. Private Sub btnEnreg_Click(), remplacez le code complet par celui ci-dessous

Private Sub btnEnreg_Click()
Dim x As Integer, ws As Worksheet

Set ws = Sheets("BDD")
'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
'       ENREGISTRER
'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
' Si rien saisit en nom, la macro s'arrète
If TextBox1 = vbNullString Then
    MsgBox "Veuillez entrer le matricule.", vbInformation, "Matricule"
    Exit Sub
ElseIf TextBox2 = vbNullString Then
    MsgBox "Veuillez entrer le nom.", vbInformation, "Nom élève"
    Exit Sub
    ' Si rien saisit en prénom, la macro s'arrète
ElseIf TextBox3 = vbNullString Then
    MsgBox "Veuillez entrer un prénom.", vbInformation, "Prénom élève"
    Exit Sub
    ' Si rien saisit en matière, la macro s'arrète
ElseIf ComboBox1 = vbNullString Then
    MsgBox "Veuillez entrer la Matiére.", vbInformation, "Matière"
    Exit Sub
    ' Si rien saisit en date naissance, la macro s'arrète
ElseIf TextBox2 = vbNullString Then
    MsgBox "Veuillez entrer une date de naissance.", vbInformation, "Date Naissance"
    Exit Sub
    ' Si rien choisit en classe, la macro s'arrète
ElseIf ComboBox3 = vbNullString Then
    MsgBox "Veuillez entrer la classe.", vbInformation, "Classe"
    Exit Sub
    ' Si rien choisit en professeur, la macro s'arrète
ElseIf ComboBox4 = vbNullString Then
    MsgBox "Veuillez entrer un professeur.", vbInformation, "Professeur"
    Exit Sub
End If

With ws
    x = .Range("A" & Rows.Count).End(xlUp).Row + 1 'enregistrement des infos aprés la dernière ligne
    .Cells(x, 1).Value = TextBox1.Text 'matricule
    .Cells(x, 2).Value = TextBox2.Text 'nom
    .Cells(x, 3).Value = CDate(TextBox3.Value) 'date naissance
    .Cells(x, 3).NumberFormat = "m/d/yyyy"
    .Cells(x, 4).Value = ComboBox1.Text 'Matiére
    .Cells(x, 5).Value = TextBox4.Value  'paiment
    .Cells(x, 6).Value = ComboBox2.Text 'classe
    .Cells(x, 7).Value = ComboBox3.Text 'groupe
    .Cells(x, 8).Value = ComboBox4.Text 'prof
End With

'bordures
With Range("A" & x & ":H" & x) '.Select
    .BorderAround LineStyle:=xlContinuous
    .BorderAround Weight:=xlThin
    With .Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
End With

'annonce
MsgBox "Enregistré", , "confirmation enregistrement"

Call Effacer
TextBox1 = WorksheetFunction.Max(Worksheets("BDD").Range("A:A")) + 1
End Sub

3. Ajoutez ce code pour l'effacement des données dans l'USF après le clic sur le bouton Enregistrer

Private Sub Effacer()
Dim c As Control

For Each c In Me.Controls
    Select Case TypeName(c)
        Case "TextBox"
            c.Value = vbNullString
        Case "ComboBox"
            c.Value = vbNullString
            c.ListIndex = -1
    End Select
Next c
Me.ListBox1.Clear
End Sub

Refaites un test avant d'aller plus loin

Merci

si tu peut vérifier cette modification

Bonjour,

Cela me semble bon mais le principal est que vous fassiez un test et voir ce que je vous propose correspond à ce que vous voulez. Donc ne m'envoyez pas à chaque fois un fichier si votre test est bon.

De plus, j'ai votre fichier qui me sert de travail pour ce que vous demandez et on évite d'alourdir le forum inutilement

Une chose que vous devez faire, sélectionnez la colonne A de la feuille BDD et mettez le format sur "Standard" (j'avais omis de vous dire cela dans mon post précédent)
Ensuite comme écrit précédemment, faites un test et dites-moi si ok

bonjour

si ok merci

mais je pence que la fonction chercher ne fonctionne pas

mais je pence que la fonction chercher ne fonctionne pas

Dans l'USF eleves, vous pouvez déjà remplacer le code ci-dessous

Private Sub Textbox6_change()
Dim derl As Integer, ligne As Integer

Application.ScreenUpdating = False

ListBox1.Clear
If TextBox6 <> vbNullString Then
    With Sheets("BDD")
        derl = .Range("B" & Rows.Count).End(xlUp).Row
        For ligne = 2 To derl
            If .Cells(ligne, 2) Like "*" & TextBox6.Value & "*" Then
                ListBox1.AddItem .Cells(ligne, 2)
            End If
        Next ligne
    End With
End If
End Sub

Après il faut m'expliquer comme vous voulez fonctionner
A partir du moment où vous mettez une info en textbox6, la listbox se remplit
Ensuite est-ce que vous faites un choix dans la listbox puis vous cliquez sur le bouton Chercher ?

bonjour

je remplit la listbox 6 par un nom ou bien un matricule puis je cliquez sur le bouton Chercher il me donne les informations de ce nom pour modifier ou supprimer ou bien pour nouvelle payement nouvelle mois

je remplit la listbox 6 par un nom ou bien un matricule puis je cliquez sur le bouton Chercher

Je vous propose d'éviter l'utilisation du bouton Chercher comme ceci

Vous entrez le nom dans la textbox6, cela va afficher la liste des noms suivant le critère de recherche dans la listbox
Vous cliquez sur votre choix dans la listbox. Ce click affiche les données enregistrées dans les textbox et combobox
Du coup on a plus besoin du bouton Chercher

Donnez votre avis avant que je ne poste la proposition

bonjour

bonne ide

merci

Ok. faites ceci dans l'USF eleves

1. Rajouter cette instruction tout au-dessus des codes (donc juste avant la SUB INitialize

Option Compare Text
Option Explicit

2. Remplacez la Private Sub Textbox6_change() par celle ci-dessous

Private Sub Textbox6_change()
Dim derl As Integer, ligne As Integer

Application.ScreenUpdating = False 'accelere la macro

If TextBox6 <> vbNullString Then
    btnEnreg.Enabled = False
    ListBox1.Clear
    With Sheets("BDD")
        derl = .Range("B" & Rows.Count).End(xlUp).Row
        For ligne = 2 To derl
            If .Cells(ligne, 2) Like "*" & TextBox6.Value & "*" Then
                ListBox1.AddItem .Cells(ligne, 2)
            End If
        Next ligne
    End With
End If

If TextBox6 = vbNullString Then
    Call Effacer
    TextBox1 = WorksheetFunction.Max(Sheets("BDD").Range("A:A")) + 1
    btnEnreg.Enabled = True
End If
End Sub

3. remplacez la Private Sub ListBox1_Click() par celle ci-dessous

Private Sub ListBox1_Click()
Dim i As Byte, ws As Worksheet
Dim lig As Integer

Set ws = Sheets("BDD")

With ws
    lig = WorksheetFunction.Match(ListBox1.Value, .Range("B:B"), 0)
    For i = 1 To 3
        Controls("TextBox" & i) = .Cells(lig, i)
    Next i
    ComboBox1 = .Cells(lig, 4)
    ComboBox2 = .Cells(lig, 6)
    ComboBox3 = .Cells(lig, 7)
    ComboBox4 = .Cells(lig, 8)
End With
End Sub

Faites un test en entrant une lettre dans la textbox 6 puis click sur le choix dans la listbox

ok merci

Re

Ok. Dans ce que je vous ai proposé ici -> https://forum.excel-pratique.com/s/goto/1152052, j'ai :

- dû modifier le code du point 3 (Sub Listbox1_click) qui renvoyait parfois de mauvaises infos.
- modifié le code au point 2. En cas où vous utilisez la recherche, le code désactivera le bouton "Enregistrer. Car si vous utilisez la recherche c'est uniquement pour Modifier ou Supprimer un élève.

Donc reprenez bien les deux codes aux points 2 et 3 avant de tester

OK merci

Rechercher des sujets similaires à "userform modifier"