La méthode _default de l'objet range a échoué

Bonjour

Je travaille sur un petit projet d'application VBA sur le courtage d'assurance.

Après la création de mes différentes feuilles qui recevront les données saisies, je viens de finalier le premier usf "FrmSaisieClientParticulier" (sans les différents contrôles bien entendu). A l'exécution, le premier client est bien enregistré. Mais lorsque je passe à la saisie du second et le clique sur le bouton ENREGISTRER, le message d'erreur en titre apparait et mon fichier se ferme.

Ce sujet semble avoir été déjà abordé sur ce forum, mais je cherche en vain la solution qui a définitivement réglé le problème.

Âmes généreuses, pourriez-vous m'aider à évoluer, please?

Merci!

Bonjour,

Voià une solution que tu pourras observer dans la maro pour l'enregistrement

Après, il y a du boulot

10courtage-23722.xlsm (68.47 Ko)

Merci M12 pour la prompte réaction. Je viens de tester mais le problème demeure : message d'erreur puis fermeture du fichier Excel.

Bonjour

Ci joint ma solution

A+ François

Ou mieux encore

Private Sub BtnENREGISTRER_Click()
 Dim enreg As Integer
 If [T_Particulier].Item(1, 1) <> "" Then enreg = [T_Particulier].Rows.Count + 1 Else enreg = 1
  [T_Particulier].Item(enreg, 1) = TxtNumClient.Value
  [T_Particulier].Item(enreg, 2) = CboCivilité.Value
  [T_Particulier].Item(enreg, 3) = TxtNom.Value
  [T_Particulier].Item(enreg, 4) = TxtPrenoms.Value
  [T_Particulier].Item(enreg, 5) = TxtProfession.Value
  [T_Particulier].Item(enreg, 6) = TxtNaissance.Value
  [T_Particulier].Item(enreg, 7) = CboVille.Value
  [T_Particulier].Item(enreg, 8) = TxtQuartier.Value
  [T_Particulier].Item(enreg, 9) = CboCommune.Value
  [T_Particulier].Item(enreg, 10) = TxtBP.Value
  [T_Particulier].Item(enreg, 11) = TxtTelephone.Value
  [T_Particulier].Item(enreg, 12) = TxtMail.Value
  [T_Particulier].Item(enreg, 13) = CboPieceID.Value
  [T_Particulier].Item(enreg, 14) = TxtNumPieceID.Value
  Unload Me
  FrmSaisieCltParticulier.Show
End Sub

A+ François

Merci François.

La première solution n'ajoute pas une nouvelle saisie mais remplace la saisie précédente.

La ligne ne s'incrémente pas.

La deuxième solution affiche le même message d'erreur et la fermeture du fichier.

Le fichier corrigé

A+ François

Bonjour le fil, bonjour le forum,

En donnant à la propriété Tag de certains contrôles de [FrmSaisieCltParticulier] le numéro de la colonne ou doit être renvoyer sa valeur, ça donne ce code :

Private O As Worksheet 'déclare la variable O (Onglet)
Private TS As ListObject 'déclare la variable TS (Tableau Structuré)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Set O = Worksheets("ClientParticulier") 'définit l'onglet O
Set TS = O.ListObjects("T_Particulier") 'définit la tableau structuré TS
End Sub

Private Sub BtnENREGISTRER_Click() 'bouton "ENREGISTRER"
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)

Set R = TS.ListColumns(1).Range.Find("") 'définit la recherche R (recherche du vide dans la colonne 1 de TS)
If R Is Nothing Or TS.ListRows.Count = 0 Then 'si aucune occurrence n'est trouvée ou si TS ne contient pas encore de ligne
    TS.ListRows.Add 'ajoute une ligne à TS
    LI = TS.ListRows.Count 'définit la ligne LI (dernière ligne de TS)
Else 'sinon (au moins une occurrence a été trouvée)
    LI = R.Row - TS.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée moins la ligne des en-têtes de TS)
End If 'fin de la condition
For Each CTRL In Me.Controls 'boucle sur tous ls contrôle CTRL de l'UserForm en cours
    If CTRL.Tag <> "" Then 'condition : si la propriété [Tag] du contrôle n'est pas vide
        'renvoie la valeur du contrôle dans la donnée ligne = LI, colonne = propriété [Tag] du contrôle, du tableau structuré TS
        TS.DataBodyRange(LI, CInt(CTRL.Tag)).Value = CTRL.Value
    End If 'fin de la condition
Next CTRL 'prochaine contrôle de la boucle
Unload Me 'vide et ferme l'UserForm en cours
FrmSaisieCltParticulier.Show 'affiche [FrmSaisieCltParticulier] vierge
End Sub

Private Sub BtnANNULER_Click() 'bouton "ANNULER"
Unload Me 'vide et ferme l'UserForm en cours
End Sub

Bonjour ThauThème.

Je guettais impatiemment votre réaction.

Ci-après le message en testant votre code.

kitjean ed v03

Merci Fanfan38 pour vos efforts. Mais le problème demeure, avec le fichier corrigé.

Re,

Désolé mais je n'ai pas cette erreur chez moi...

Je crois que j'ai trouvé

la panne venait de ta feuille particulier

j'en ai fait une autre (j'ai changé le nom du tableau)

et pour moi ça marche

A+ François

ThauThème

J'ai testé le code sur une autre machine et je peux confirmer que cela marche.

Je ne comprends pas cela

Fanfan38!!!

Ok! j'ai fait plusieurs tests. Pour le moment cela marche. Vous êtes merveilleux!

Merci.

Bonsoir le fil, bonsoir le forum,

C'est ton tableau structuré qui était vérolé... Je l'ai converti en plage puis reconverti en tableau structuré (en lui donnant le nom Tableau1et en adaptant le code). Là plus aucun problème...

ThauThème

Bonsoir

Je reviens encore car je rencontre toujours un problème au remplissage de ma feuil3 (ClientParticulier). Mon tableau n'accepte que cinq (05) lignes. Lorsque je tente d'enregistrer un sixième client, le message d'erreur dont j'ai fait la copie d'écran réapparait.

Re,

Comme dit dans le post du dessus, c'est ton tableau structuré qui fout la pagaille !

Fait comme indiqué au-dessus...

Vraiment!

Re,

Oui vraiment. Je t'ai mis une pièce jointe dans le post antérieur...

Merci ThauThème

Rechercher des sujets similaires à "methode default objet range echoue"