Hello @XTof@, DJ-Run, Creepy et le Forum...
Bon déjà tu vas te faire enguirlander pour le sujet de ce post....
Ensuite à la volée... en travaillant sur NotePad...
Remplacer Ceci :[.b]
Dim DerCell, Dercell1 As Integer
Remplacement :[.b]
Dim DerCell As String, Dercell1 As Integer (sinon =>>> DerCell sera Variant....)
(idem dans d'autres endroits ...)
===> DANGER
Si tu déclare Public au niveau Module Dercell et Dercell1......... Tu risque très gros ennuits de réutiliser le même nom de variable public pour les redéclarer dans la Macro "Private Sub Supprimer_Click...." et encore pire dans la macro où elles passent en tant que String !!! (Dim DerCell, Dercell1 As String)... C'est vraiment le Big Bordel déjà à ce niveau je vois...
Ensuite... juste être plus propre :
Remplacer Ceci :[.b]
Private Sub ClearModifdial()
ModMarche.Text = ""
ModClient.Text = ""
ModNMR.Text = ""
ModPeriode.Text = ""
ModUnite.Text = ""
ModCM.Text = ""
ModTelCM.Text = ""
ModCEC.Text = ""
ModTelCEC = ""
ModProd.Text = ""
ModTelProd.Text = ""
ModDU.Text = ""
ModTelDU.Text = ""
ModRem.Text = ""
End Sub
Remplacement Opition 1 :[.b]
Private Sub ClearModifdial()
Dim CTRL As Control
For Each CTRL In Controls
If TypeOf CTRL Is MSForms.TextBox Then
CTRL = ""
End If
Next CTRL
Remplacement Opition 2 :[.b]
(Si tu nettoies TOUTES les texbox... sinon utilise les TAG : )
Private Sub ClearModifdial()
Dim CTRL As Control
For Each CTRL In Controls
If CTRL.Tag = "Nettoyer" Then
CTRL = ""
End If
Next CTRL
La aussi :
Remplacer Ceci :[.b]
Feuil1.Clientbox.ListFillRange = "BdeD!A2:" & DerCell
Feuil1.MarcheBox.ListFillRange = "BdeD!B2:" & Dercell1
Feuil1.Clientbox.Value = ""
Feuil1.MarcheBox.Value = ""
Feuil1.Nmr.Caption = ""
Feuil1.Periode.Caption = ""
Feuil1.Unite.Caption = ""
Feuil1.CM.Caption = ""
Feuil1.TelCm.Caption = ""
Feuil1.CEC.Caption = ""
Feuil1.TelCEC.Caption = ""
Feuil1.Prod.Caption = ""
Feuil1.ProdTel.Caption = ""
Feuil1.DU.Caption = ""
Feuil1.TelDU.Caption = ""
Feuil1.Remarque.Caption = ""
Remplacement Opition 2 :[.b]
With Feuil1
.Clientbox.ListFillRange = "BdeD!A2:" & DerCell
.blah
.blah
.blah
End With
(Quoiqu'on peut aussi faire une boucle ptet sur tes ActiveX...)
La aussi ATTENTION vaut mieux nettoyer ta ListBox avant de la ré-remplir..
Remplacer Ceci :[.b]
LstResultat.Visible = True
LstResultat.ColumnCount = 3
Remplacement :[.b]
LstResultat.Visible = True
LstResultat.ColumnCount = 3
LstResultat.Clear
Là plus grave :
ERREUR DANS CETTE LIGNE !! DOUBLONS D'INSTRUCTIONS[.b]
Set C = .Find(Cherche, LookIn:=xlValues)
Set C = .Find(Cherche, LookIn:=xlValues)
(dans la condition "If btnNom.Value = True Then"...)
Pour la suite je ne peux pas compredre vu que tu répètes strictement trois fois la même recherche sur la Même Plage :
L = Sheets("BdeD").Range("A65536").End(xlUp).Row
Set Maplage = Sheets("BdeD").Range("A2:C" & L)
De plus à ce state un Select Case me semble plus approprié... Avec un set global de plage unique...
les "Dim Tab1() As String, Dim R As Integer, Dim Tab1() As String Dim Z As Byte, I As Byte, J As Byte...... servent à quoi ? (suffit pas de recopier mes démos !! lol)
Voilà grosso-modo ce que je peux voir en 5 minutes sur ton Txt.
Je te conseillerai de retourner sur les USF-Contact-Manager qui reste une belle démo avec en plus l'avis et l'assistance de Ti et Stéph...
Pour ce qui est du post de @Xtoph@, pas si sûr que que l'envoie en BAL soit apprécié (enfin pour ma part).
Moi le conseille que je donne à Creepy c'est de repartir plus petit... de comprendre par exemple que si Toto et Zaza sont des variables qui font :
Toto = Sheets("BdeD").Range("A65536").End(xlUp).Row
Zaza = Range("BdeD!A2").End(xlDown).Address
Toto est qui ? et Zaza ??? Boolean, Byte, Integer, String, Long, Double??
Ensuite si on Dim une variable en tête de module c'est pour que cette variable soit utilisable par les procédures de ce module.... Par pour refaire un Dim dans chacune...
Enfin voilà... Il y a encore du boulot Creepy...
Bon Aprèm
@+Thierry