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
sans titre

Voila l erreur affichée...

et ou le debogage pointe:

sans titre22

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+

Rechercher des sujets similaires à "message erreur creation formulaire vba base donnees"