Message d erreur dans la création du formulaire VBA pour base de données
Bonjour je suis novice, et j ai suivi un tuto pour faire son propre formulaire excel, en l adaptant a ma BDD...
j ai du faire une boulette et je n arrive pas a la corrigée par logique car je ne comprend pas cette partie:
'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2:d10")
.NumberFormat = "0"
.Value = .Value
End With
Voila l erreur affichée...
et ou le debogage pointe:
mon code complet:
'Les lignes qui débutent par une apostrophe identifient un commentaire c'est-à-dire du texte exploitable par le lecteur et non par le programme VBA
' Objectif : documenter le code VBA pour le rendre plus compréhensible.
'Attention les deux lignes suivantes doivent être impérativement placées en tout début de programme
Option Explicit 'Activation de la déclaration explicite des variables
Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
'Correspond au programme du bouton QUITTER
Private Sub CommandButton1_Click()
Unload Me
'Unload => Permet de fermer l'Userform et de l'effacer de la mémoire, les valeurs de ses contrôles sont à alors perdues.
' Me => Référence à l'objet en cours
End Sub
Private Sub CommandButton3_Click()
Dim L As Integer
If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
L = Sheets("bases de données stock ATD").Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE
Range("A" & L).Value = ComboBox1 'Insère la donnée de la liste déroulante dans la colonne A
Range("B" & L).Value = TextBox1 'Insère la donnée de la textbox1 dans la colonne B
'et à suivre....
Range("D" & L).Value = TextBox2
Range("E" & L).Value = TextBox3
Range("F" & L).Value = TextBox4
Range("G" & L).Value = TextBox5
Range("H" & L).Value = TextBox6
Range("I" & L).Value = TextBox7
End If
'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2;d2")
.NumberFormat = "0"
.Value = .Value
End With
' Affiche une boîte de message
MsgBox ("Produit inséré dans fichier sélectionné") 'Vous informant que le présent contact est inséré dans votre tableau Excel.
Unload Me ' Vide et ferme l'Userform ( formulaire)
UserForm1.Show 'Affiche le formulaire
End Sub
Private Sub Label2_Click()
End Sub
Private Sub Label6_Click()
End Sub
Private Sub Laize_Click()
End Sub
Private Sub TextBox1_Change()
End Sub
Private Sub TextBox2_Change()
End Sub
Private Sub TextBox7_Change()
End Sub
Private Sub TextBox8_Change()
End Sub
'Correspond au programme du FORULAIRE
'Cet évènement est important car il permet de définir les propriétés des objets et les valeurs par défaut des variables, lors du lancement du Userform.
Private Sub UserForm1_Initialize() 'à l'initialisation de l'userform
' Déclaration des variables grâce à Dim
' 1° Choisir un nom
' 2° Choisir un TYPE (= définir la nature du contenu)
' --------------------------------------------------------
Dim J As Long 'déclare la variable J
Dim I As Integer
' Affecter une valeur à une variable (= fixer la valeur de la variable)
Set Ws = Sheets("FICHIER ADRESSES") 'Attention ce nom doit correspondre au nom de votre ONGLET
'On stock le nom de la feuille "FICHIER ADRESSES" dans une variable nommée WS
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With
For I = 1 To 8 'on lance une boucle de valeur mini 1 et maxi 8
Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
Next I
End Sub
'Correspond au programme du bouton MODIFIER
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim I As Integer
If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 8
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
End If
Next I
End If 'fin de la condition
'Code permettant de modifier le format de la plage de cellule en format nombre
With Ws.Range("D2:d10")
.NumberFormat = "0"
.Value = .Value
End With
End Sub
'Correspond au programme de la LISTE DEROULANTE
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
For I = 1 To 8
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
Next I
End Sub
Private Sub UserForm_Click()
End Sub
je vous remercie pour votre aide... je suis perdue...
Peut etre qu'en remplaçant D2;d2 par D2:D2?
merci de votre réponse... mais non j ai changé et toujours ce probleme...
pouvez vous m expliqué a quoi corresponds With Ws.Range("D2;d2") ?
With sert à éviter de répéter une partie de commande.
Par exemple
Range("A2").Value = "A"
Range("A2").Interior.Colorindex = 2
Peut être simplifié en:
With Range("A2")
.Value = "A"
.Interior.Colorindex = 2
End With
Bien que là vu le nombre de commande cette simplification n'a pas d'intérêt.
Mais si tu lances beaucoup de commandes ca peut etre interessant pour simplifier et clarifier le code.
Je pense que ton exemple il faut juste que tu remplaces le point-virgule par un deux points
Range("D2:d2") et pas Range("D2;d2")
Bonjour,
Ws n'est pas défini (C'est le sens du message d'erreur)
Si tu utilises "With Ws" cela suppose que VBA sait à quoi correspond ce Ws ( à priori avec une instruction d'affectation : Set Ws = Worksheet "blabla")
A+