Combobox et relation avec une base de données
Bonjour,
je bloque sur un probleme de VBA et d'actualisation de combobox.
J'ai tout un tableau qui est connecté a une base de donnée. Aucun changement n'est possible dans celui-ci pour éviter les problèmes de lecture seule car nous sommes une dizaine a s'en servir.
J'ai donc créer des combobox qui permettent de modifier la base de donnée et d'actualiser a la suite.
Dans ce cas précis, je change la ligne 0000281-0000 pour modifier l'état de "A faire" a "en validation".
L'état est bien modifié, il génère un email automatiquement mais boucle sur une deuxième ligne. Comme si l'actualisation "Refresh all" faisait changer l'état de ma combobox et modifiait une deuxième ligne.
Si vous avez une idée, je suis preneur car vraiment je n'ai aucune idée d'ou ce problème arrive.. Merci d'avance, j'espere que ma demande fut claire !
Private Sub ComboBox1_Change()
ligne = ActiveCell.Row
etat1 = Cells(ligne, 16)
etat = ComboBox1.value
plan = Cells(ligne, 1)
CA = Cells(ligne, 11)
client = Cells(ligne, 10)
designation = Cells(ligne, 3)
chantier = Cells(ligne, 12)
'Mise a jour etat
If etat1 <> etat Then
'Ajout de la ligne a la base de données
Dim CnBDD As ADODB.Connection
Dim wChaineConnection As String
Set CnBDD = New ADODB.Connection
wChaineConnection = "Provider=SQLOLEDB.1;Password=Post37Forming;Persist Security Info=True;User ID=sa;Initial Catalog=Tab_DEV;Data Source=srv-sage"
CnBDD.Open wChaineConnection
CnBDD.Execute "UPDATE [Tab_DEV].[dbo].[DEV]SET etat = '" & etat & "' WHERE [Plan] = '" & plan & "';"
CnBDD.Close
Call Mise_a_jour
End If
If etat = "EN VALIDATION" And etat1 = "A FAIRE" Then
'Création d'un mail si en cours de validation
Dim mail As String, lignemail As String, plage As Range, trouve As Range, PJ As String
'Recherche de l'adresse mail du destinataire
PJ = "P:\05-Solidworks\CAO\" & plan & "\" & plan & ".pdf"
Set trouve = Worksheets("Ghost").Range("N4:N15").Find(what:=CA, lookat:=xlWhole, MatchCase:=False)
If trouve Is Nothing Then
Else
lignemail = trouve.Row
mail = Worksheets("Ghost").Cells(lignemail, 15)
End If
Set email = CreateObject("Outlook.Application")
With email.CreateItem(olMailItem)
.To = mail
.Subject = client & ": Validation du plan " & plan & ": " & designation & " // " & chantier
If Len(Dir(PJ)) > 0 Then
.Attachments.Add PJ
End If
.Body = "Bonjour " & CA & "," & vbCrLf & "Merci de nous valider ce plan de " & designation & " du chantier de " & chantier & " pour le lancement en production "
.Display
End With
End If
End SubEt ci-dessous le code quand je change de selection :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ligne = ActiveCell.Row
plan = Cells(ligne, 1)
If Not Len(plan) <> 12 Then
longueur = Cells(ligne, 18)
profondeur = Cells(ligne, 19)
hauteur = Cells(ligne, 20)
designation = Cells(ligne, 3)
finition = Cells(ligne, 4)
dateplan = Cells(ligne, 7)
datelivraison = Cells(ligne, 8)
famille = Cells(ligne, 14)
'remplissage des informations de l'assemblage
ComboBox1.value = Cells(ligne, 16)
ComboBox2.value = Cells(ligne, 15)
TextBox2.value = plan & " : " & designation
TextBox6.value = designation
TextBox7.value = famille
TextBox8.value = dateplan
TextBox9.value = datelivraison
'ajout de la finition
If finition <> "" Then
TextBox1.BackColor = vbWhite
TextBox1.value = Cells(ligne, 4)
Else
TextBox1.value = ""
TextBox1.BackColor = vbRed
End If
'Ajout de la longueur
If longueur <> "" Then
TextBox4.BackColor = vbWhite
TextBox4.value = longueur
Else
TextBox4.value = ""
TextBox4.BackColor = vbRed
End If
'Ajout de la profondeur
If profondeur <> "" Then
TextBox3.BackColor = vbWhite
TextBox3.value = profondeur
Else
TextBox3.value = ""
TextBox3.BackColor = vbRed
End If
'Ajout de la hauteur
If hauteur <> "" Then
TextBox5.BackColor = vbWhite
TextBox5.value = hauteur
Else
TextBox5.value = ""
TextBox5.BackColor = vbRed
End If
Else
ComboBox1.value = ""
ComboBox2.value = ""
TextBox2.value = ""
TextBox6.value = ""
TextBox7.value = ""
TextBox8.value = ""
TextBox1.value = ""
TextBox4.value = ""
TextBox3.value = ""
TextBox5.value = ""
TextBox5.BackColor = vbWhite
TextBox3.BackColor = vbWhite
TextBox4.BackColor = vbWhite
TextBox1.BackColor = vbWhite
End If
End SubBonne journée.