MsgBox valeur textbox n'existe pas déjà

Bonjour et Bonne Année à tous

j'ai crée un Userform pour saisir automatiquemet des données clients /distributeurs avec adresses ...etc

serait it possible q'un MsgBox apparaisse si je saisi la raison sociale d'un client qui existe déjà dans mon tableau en l’occurrence dans la colonne F, tout en m'indiquant le distributeur avec lequel il est en relation (Colonne A)

Merci d'avance.

Private Sub CmbValider_Click()

Dim dl As Integer

dl = Application.WorksheetFunction.CountA(Sheets("TRI avec code client").Range("$A:$A")) + 1

Sheets("TRI avec code client").Range("A" & dl) = ComboBox1.Value

Sheets("TRI avec code client").Range("B" & dl) = ComboBox2.Value

Sheets("TRI avec code client").Range("C" & dl) = ComboBox3.Value

Sheets("TRI avec code client").Range("D" & dl) = ComboBox6.Value

Sheets("TRI avec code client").Range("E" & dl) = ComboBox5.Value

Sheets("TRI avec code client").Range("F" & dl) = TxtRaison.Value

Sheets("TRI avec code client").Range("G" & dl) = TextDate.Value

Sheets("TRI avec code client").Range("H" & dl) = TextDurée.Value

Sheets("TRI avec code client").Range("I" & dl) = TextNuméro.Value

Sheets("TRI avec code client").Range("J" & dl) = ComboBox7.Value

Sheets("TRI avec code client").Range("K" & dl) = ComboBox8.Value

ComboBox1.Value = ""

ComboBox2.Value = ""

ComboBox3.Value = ""

ComboBox5.Value = ""

ComboBox6.Value = ""

ComboBox7.Value = ""

ComboBox8.Value = ""

TxtRaison.Value = ""

TextDate.Value = ""

TextDurée.Value = ""

TextNuméro.Value = ""

End Sub

Private Sub ComboBox2_Change()

Sheets("Feuil9").Range("M17").Value = ComboBox2.Value

If Sheets("Feuil9").Range("M17").Value <> "" Then

ComboBox3.RowSource = "Liste_Commune"

End If

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub TxtRaison_Change()

End Sub

Private Sub UserForm_Initialize()

ComboBox1.List = Sheets("Distributeur").Range("TBL_Distributeur[Liste distributeurs]").Value

ComboBox2.RowSource = "Liste_Villes"

ComboBox6.RowSource = "Mode_de_gestion"

ComboBox5.RowSource = "Nature_contrat"

ComboBox7.RowSource = "Affichage_couleurs"

ComboBox8.RowSource = "Distr_carb"

End Sub

Bonjour Nismo,

c'est très bien d'utiliser la balise code, mais tu dois placer ton code VBA entre les 2 balises, pas après !

(code] 'la parenthèse gauche au lieu du [ est juste pour que te montrer le texte de la balise
Sub Essai()
  'mettre le code VBA ici, et de préférence un code VBA avec indentation !  ;)
End Sub
(/code] 'idem

* la 1ère balise est une balise ouvrante ; signification : « le texte placé à la suite doit être présenté comme du code VBA »

* la 2ème balise est une balise fermante ; signification : « fin du texte à présenter comme du code VBA »

* on reconnaît une balise fermante car son nom débute par un caractère slash = barre oblique : « / »

* à l'inverse, une balise dont le nom ne commence pas par un slash est une balise ouvrante


autre exemple : (b]texte en gras(/b]

* la balise ouvrante dont le nom est b signifie : « bold = gras : texte à mettre en gras »

* la balise fermante est donc /b : « fin de gras »

dhany

@Nismo

lis d'abord mon post précédent, puis celui-ci.

j'ai réécrit ainsi ton code VBA (avec mise entre balises de code, et indentation ! ) :

Private Sub UserForm_Initialize()
  ComboBox1.List = Worksheets("Distributeur").Range("TBL_Distributeur[Liste distributeurs]")
  ComboBox2.RowSource = "Liste_Villes"
  ComboBox6.RowSource = "Mode_de_gestion"
  ComboBox5.RowSource = "Nature_contrat"
  ComboBox7.RowSource = "Affichage_couleurs"
  ComboBox8.RowSource = "Distr_carb"
End Sub

Private Sub CmbValider_Click()
  Dim dl As Integer, i As Byte
  With Worksheets("TRI avec code client")
    dl = Application.WorksheetFunction.CountA(.Columns("A")) + 1
    With .Range("A" & dl)
      .Value = ComboBox1
      .Offset(, 1) = ComboBox2
      .Offset(, 2) = ComboBox3
      .Offset(, 3) = ComboBox6
      .Offset(, 4) = ComboBox5
      .Offset(, 5) = TxtRaison
      .Offset(, 6) = TextDate
      .Offset(, 7) = TextDurée
      .Offset(, 8) = TextNuméro
      .Offset(, 9) = ComboBox7
      .Offset(, 10) = ComboBox8
    End With
  End With
  For i = 1 To 8
    If i <> 4 Then Controls("ComboBox" & i).Value = ""
  Next i
  TxtRaison = "": TextDate = "": TextDurée = ""
  TextNuméro = ""
End Sub

Private Sub ComboBox2_Change()
  Worksheets("Feuil9").[M17] = ComboBox2
  If ComboBox2 <> "" Then
    ComboBox3.RowSource = "Liste_Commune"
  End If
End Sub

Private Sub CommandButton2_Click()
  Unload Me
End Sub

si dans ton code initial tu as oublié ComboBox4.Value = "", alors enlève le test inclus dans la boucle For :

  For i = 1 To 8
    Controls("ComboBox" & i).Value = ""
  Next i

oui, j'ai bien utilisé une 2ème mise entre balises de code (on n'arrête pas l'progrès, hein ? )

par contre, j'ai pas fait ta demande, car sans fichier, ça m'dit pas trop.

dhany

Bonjour Dhan

Je te remercie pour ton aide

j'ai joint le fichier comme demandé

Cordialement

2test-2019.xlsm (0.96 Mo)

Bonjour Dhan

Je te remercie pour ton aide

j'ai joint le fichier comme demandé

cordialement

9test-2019.xlsm (0.96 Mo)

Bonjour Dhan

Je te remercie pour ton aide

j'ai joint le fichier comme demandé

cordialement

@Nismo

j'ai vu ton fichier, mais il est vraiment trop brouillon, et tout est mélangé !

* un module de classe vide et inutile

* 14 modules, dont 3 sont vides : Module3 ; Module4 ; Module5 ➯ compter 11 modules, mais vu leur contenu, c'est encore trop !

* ton module ThisWorkbook est vide, mais tu as une sub Workbook_Open() dans Module2 !

* tu as un classeur de 13 feuilles (dont beaucoup sont cachées), et dans Module1, ta sub Valider() fait référence à une feuille inexistante "feuil9" ! tu as peut-être confondu avec cette feuille dont le CodeName est "Feuil9" ? si oui, son nom est "Feuil2" ; une seule cellule est utilisée : H9, qui contient la formule : =100*12 ➯ résultat : 1200 ; alors quand ta sub Valider() lit les cellules B3, D3, F3 qui sont vides, j'suis pas vraiment sûr qu'ce soit la bonne feuille non plus !

* dans Module1, ta sub Quitter() utilise un 2ème Application.DisplayAlerts = False au lieu de Application.DisplayAlerts = True

* dans Module7, ta sub clear() utilise Target alors que c'est pas une sub événementielle ; et l'nom d'la sub est un mot-clé VBA !

* une autre sub clear() dans Module6 ; Module8 (tu les collectionne ? )

* dans Module9, ta sub test() utilise ComboBox1 de UserForm1 ; idem pour ComboBox2 et ComboBox3 ; il semble que ce code aurait dû être dans UserForm1, mais si vraiment tu veux tester tes ComboBox de UserForm1 à partir d'un module, tu dois alors les préfixer ainsi : UserForm1.ComboBox1.

* dans Module10 : une sub événementielle Worksheet_Change() ! euh, tu sais qu'un classeur Excel c'est pas un shaker ?

* dans Module13 : une sub vide et événementielle Zonecombinée4_QuandChangement()

* tu as toute une flopée de noms définis, dont plusieurs contiennent des références invalides !


après avoir dressé une liste non exhaustive des anomalies, j'arrête là, et je laisse la place à un autre intervenant.

bonne chance pour la suite !

dhany

Rechercher des sujets similaires à "msgbox valeur textbox existe pas deja"