Bugs sur UserForm

Bonjour à tous,

Pour me présenter un peu, par politesse avant de poser ma première question, je dirai que je suis autodidacte en Excel avec lequel je me débrouille pas trop mal avec les formules par contre le VBA j'ai vraiment beaucoup de mal. Comptabilité, Ressources Humaines, Oenologie, mais actuellement chômeur

Je viens de créer mon 1er UserForm qui permet de sasir / modifier / consulter une liste de fournisseurs et il fonctionne en partie même si je voudrai y ajouter quelques modifications que, et après plusieurs tests qui ont planté l'application, je suis obligé d'admettre que j'en suis incapable.

Je voudrai corriger les bugs suivants :

  • malgré avoir rentré une condition, j'arrive à enregistrer un fournisseur qui est déjà dans la liste ( ps : le msgbox d'avertissement sur les doublons fonctionne quant à lui) ;
  • le code fournisseur ne doit pas excéder 5 caractères maximum en alphabétique et il doit être OBLIGATOIRE ;
  • la combobox recherche dans toute la colonne A alors que je lui ai signifié de regarder à partir de la cellule A16.
Option Explicit
Dim lig As Integer

Private Sub ComboBox1_Change()
' Forcer la mise en majuscule sur la ComboBox1
    ComboBox1.Value = UCase(ComboBox1.Value)
End Sub

Private Sub Frame1_Click()

End Sub

Private Sub TextBox1_Change()
' Mettre en majuscule
    TextBox1.Value = UCase(TextBox1.Value)
End Sub

Private Sub TextBox10_Change()
' Mettre en majuscule
    TextBox10.Value = UCase(TextBox10.Value)
End Sub

Private Sub TextBox11_Change()
' Mettre en majuscule
    TextBox11.Value = UCase(TextBox11.Value)
End Sub

Private Sub TextBox12_Change()
' Mettre en majuscule
    TextBox12.Value = UCase(TextBox12.Value)
End Sub

Private Sub TextBox13_Change()
' Mettre en majuscule la première lettre de chaque mot
    TextBox13.Value = WorksheetFunction.Proper(TextBox13.Value)
End Sub

Private Sub TextBox14_Change()
' Mettre en majuscule nom de famille
    TextBox14.Value = UCase(TextBox14.Value)
End Sub

Private Sub TextBox16_Change()
' Mettre en majuscule la première lettre de chaque mot
    TextBox16.Value = WorksheetFunction.Proper(TextBox16.Value)
End Sub
Private Sub TextBox17_Change()
' Mettre en majuscule le mot entier
    TextBox17.Value = UCase(TextBox17.Value)
End Sub

Private Sub TextBox2_Change()
' Mettre en majuscule la première lettre de chaque mot
    TextBox2.Value = WorksheetFunction.Proper(TextBox2.Value)
End Sub

Private Sub TextBox5_Change()
' Mettre en majuscule la première lettre de chaque mot
    TextBox5.Value = WorksheetFunction.Proper(TextBox5.Value)
End Sub

Private Sub TextBox6_Change()
' Mettre en majuscule le mot entier
    TextBox6.Value = UCase(TextBox6.Value)
End Sub

Private Sub UserForm_Initialize()
Dim x As Integer

ComboBox1.Clear

With Sheets("Fournisseurs")
For x = 2 To .Range("A16").End(xlDown).Row
        ComboBox1 = .Range("a" & x)
        'filtre les doublons
       If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("a" & x)
    Next x
    ComboBox1.Text = ""
End With
End Sub

Private Sub UserForm_Activate()

Me.Top = Me.Top + 5
Me.Left = Me.Left + 5

ComboBox1.Text = ""
TextBox1.SetFocus

' Vérification de la présence du fournisseur dans la base
Dim R As Variant
If ComboBox1.Value <> "" Then
    R = Application.VLookup(ComboBox1.Value, Range("A16:A65000"), 2, True)
        If IsError(R) Then
        MsgBox "Valeur existante dans la base"
        Else
        End If
End If

End Sub

Private Sub TextBox3_Change() ' Affiche Nom et Prénom
If TextBox3.Text <> "" Then _
TextBox1.Text = ComboBox1.Value
' Mettre en majuscule la première lettre de chaque mot
    TextBox3.Value = WorksheetFunction.Proper(TextBox3.Value)
End Sub

Private Sub TextBox4_Enter()
Dim cel As Range, i As Long

TextBox4.SetFocus
If TextBox2 = "" Then
With Sheets("Fournisseurs").Range("A16:Z65000")
Set cel = .Find(TextBox1, , xlValues, xlWhole)
If Not cel Is Nothing Then
MsgBox "Le fournisseur est déjà dans la liste.", vbCritical, "Attention!"
For i = 1 To 21
Me.Controls("TextBox" & i).Text = ""
Next
End If
End With
Else
Exit Sub
End If
End Sub

Private Sub CommandButton1_Click() 'Bouton Enregistrements
Dim col As Integer, derlig As Integer, x As Integer
Dim ctrl As Control, cel As Range, i As Long

With Sheets("Fournisseurs")
derlig = .Range("A16").End(xlDown).Row + 1

For Each ctrl In Me.Controls
col = Val(ctrl.Tag)
If col > 0 Then
If Not IsNumeric(ctrl) Then
.Cells(derlig, col) = ctrl
Else
.Cells(derlig, col) = CDbl(ctrl)   'format numérique simple ex: 3124
End If
End If
Next ctrl
.Range("G16:H65000").NumberFormat = "000 000 00 00"   'Numéro téléphone et fax
.Range("B:u").Columns.AutoFit
.Range("A16:Z65000").Sort [A2], xlAscending
End With

With Sheets("Fournisseurs")
ComboBox1.Clear
For x = 2 To .Range("A16").End(xlDown).Row
        ComboBox1 = .Range("a" & x)
        'filtre les doublons
       If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("a" & x)
    Next x
    ComboBox1.Text = ""
End With

For i = 1 To 21
Me.Controls("TextBox" & i).Text = ""
Next
TextBox2.SetFocus
End Sub

Private Sub CommandButton2_Click() 'Bouton Recherche
Dim cel As Range, i As Long

If ComboBox1 <> "" Then
With Sheets("Fournisseurs").Range("A16:Z65000")
Set cel = .Find(ComboBox1, , xlValues, xlWhole)
If Not cel Is Nothing Then
For i = 1 To 21
Me.Controls("TextBox" & i).Text = cel.Offset(0, i - 1)
Next i
TextBox7 = Format(TextBox7, "000 000 00 00")
TextBox8 = Format(TextBox8, "000 000 00 00")
Else
MsgBox "Pas de correspondant en cours.", , "Fournisseurs"
ComboBox1 = ""
For i = 1 To 21
Me.Controls("TextBox" & i).Text = ""
Next i
End If
End With
End If
TextBox2.SetFocus
End Sub

Private Sub CommandButton3_Click() 'Bouton Modification
Dim cel As Range, i As Long

If ComboBox1 <> "" Then
With Sheets("Fournisseurs").Range("A16:Z65000")
Set cel = .Find(ComboBox1, , xlValues, xlWhole)
If Not cel Is Nothing Then
For i = 1 To 21
cel.Offset(0, i - 1) = Me.Controls("TextBox" & i).Text
Next i
End If
End With
End If
For i = 1 To 21
Me.Controls("TextBox" & i).Text = ""
Next i
TextBox2.SetFocus
End Sub

Private Sub CommandButton4_Click() 'Bouton Annuler
Dim x As Long, k As Long, RechNom As Range, Rep

Rep = MsgBox("Voulez-vous vraiment annuler les modifications ?", vbYesNo, "Fournisseur")
If Rep = vbYes Then
For k = 1 To 21
Me.Controls("TextBox" & k).Text = Me.Controls("TextBox" & k).Text
Next k
Else
With Sheets("Fournisseurs").Columns(1)
Set RechNom = .Cells.Find(TextBox1.Value)
    If RechNom Is Nothing Then
        Exit Sub
    Else
    lig = RechNom.Row
    End If
With Sheets("Fournisseurs")
For x = 1 To 21
.Cells(lig, x) = Me.Controls("Textbox" & x)
If Not IsNumeric(Me.Controls("Textbox" & x)) Then
.Cells(lig, x) = Me.Controls("Textbox" & x)
Else
.Cells(lig, x) = CDbl(Me.Controls("Textbox" & x))
End If
Next x
End With
End With
End If
TextBox2.SetFocus
End Sub

Private Sub CommandButton5_Click() 'Bouton Fermeture Formulaire
Unload Me
End Sub

le fichier est https://www.cjoint.com/c/EKCjZFGf5GC pour l'instant

En attendant d'avoir vos avis, merci pour la lecture et bon week-end

Joe

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

Pourquoi avoir un bouton ''Rechercher'' ? En mettant le même code dans celui du combobox1, tu aurais le résultat instantanément.

Non ?

Bye !

Bonjour gmb, le forum,

Effectivement ça fonctionne super bien et bien mieux que ma version initiale. Il me reste maintenant à étudier les modifications que tu as faites et les comparer à mon fichier initial afin de pouvoir m'en imprégner et ne plus répéter les mêmes erreurs.

Un grand merci pour ton aide

Bon week-end à tous,

Joe

A ta disposition si tu veux que je t'aide à te passer du bouton ''Recherche''...

Bye !

Oui, je veux bien sans le bouton "Rechercher", effectivement, il ne m'était pas venu à l'idée de faire ça en automatique... de toute façon je ne sais pas faire ce genre de chose

En attendant, merci et bon week-end,

Joe

Nouvelle version à tester.

Bye !

Bonjour gmb, le forum,

Je viens de tester et ça fonctionne très bien...

Un très grand merci pour ton aide. Je n'ai plus qu'à m'en inspirer pour comprendre et apprendre

Excel-lent dimanche

Joe

Re-bonjour gmb, le forum,

J'ai juste un léger bug que je ne parviens pas à identifier :

Lorsque j'affiche le premier fournisseur, tout est décalé d'une textbox... Si je prends les fournisseurs suivants, ça colle, mais c'est uniquement le premier de la liste "DPD"... Bizarre, c'est pas grave en soit, sinon le reste fonctionne très bien.

Encore merci.

Bon dimanche.

Joe

Je 'ai pas ce résultat. Ou alors, je n'ai pas compris.

Détaille moi bien ta manip pour arriver à ce bug....

Bye !

capture

Je viens de faire 3 tests,

Le 1er : c'est le fichier dont je me sers pour mon activité d'auto-entrepreneur et là ça fonctionne bien.

Le 2e fichier est celui que tu m'as envoyé et ça fonctionne bien également !

Le 3e fichier : c'est le fichier sur lequel je suis en train de créer un autre UserForm pour la gestion des produits et c'est là qu'est le bug... En fait, j'ai du faire une bêtise ou changer un truc sans m'en apercevoir.

Donc, je suis fautif et je vais réimporter l'UserForm et ça devrait coller.

Désolé de t'avoir dérangé pour rien

Bon dimanche,

Joe

Rechercher des sujets similaires à "bugs userform"