MsgBox valeur textbox n'existe pas déjà

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
N
Nismo
Membre habitué
Membre habitué
Messages : 113
Inscrit le : 11 août 2015
Version d'Excel : 2010

Message par Nismo » 2 janvier 2019, 15:04

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
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'898
Appréciations reçues : 694
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 3 janvier 2019, 02:13

Bonjour Nismo,

:lole:  c'est très bien d'utiliser la balise code, mais tu dois placer ton code VBA entre les 2 balises, pas après !  :lol:
(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
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'898
Appréciations reçues : 694
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 3 janvier 2019, 02:37

@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 !  :P :mrgreen:) :
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 ?  ::D :mrgreen:)

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

:joindre:
dhany
N
Nismo
Membre habitué
Membre habitué
Messages : 113
Inscrit le : 11 août 2015
Version d'Excel : 2010

Message par Nismo » 3 janvier 2019, 09:17

Bonjour Dhan :)
Je te remercie pour ton aide
j'ai joint le fichier comme demandé
Cordialement
Test 2019.xlsm
(985.21 Kio) Pas encore téléchargé
N
Nismo
Membre habitué
Membre habitué
Messages : 113
Inscrit le : 11 août 2015
Version d'Excel : 2010

Message par Nismo » 3 janvier 2019, 09:18

Bonjour Dhan
Je te remercie pour ton aide :)
j'ai joint le fichier comme demandé
cordialement
Test 2019.xlsm
(985.21 Kio) Téléchargé 7 fois
N
Nismo
Membre habitué
Membre habitué
Messages : 113
Inscrit le : 11 août 2015
Version d'Excel : 2010

Message par Nismo » 3 janvier 2019, 09:19

Bonjour Dhan
Je te remercie pour ton aide :)
j'ai joint le fichier comme demandé
cordialement
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'898
Appréciations reçues : 694
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 3 janvier 2019, 11:34

@Nismo

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

* 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 !  :P

* 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 !  :roll:

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

* 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():roll:  euh, tu sais qu'un classeur Excel c'est pas un shaker ?  :lole:

* 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 !
  :trfl:

dhany
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message