Erreur Automation - "La méthode _Défaut de l'objet range a échoué"

Bonjour,

Depuis ce matin j'ai une erreur sur un de mes fichiers excel qui recense une liste de livres. Jusque là tout allait bien. Mais ce matin, quand je veux enregistrer un nouveaux livres, j'ai une erreur d'automation "La méthode _defaut de l'objet range a échoué" systématique lorsque je clique sur "enregistrer" sur mon userform et ensuite excel crash. J'ai essayé beaucoup de chose, j'ai aussi essayé de désinstaller et réinstaller excel. C'est en désespoir de cause que je viens vers vous.

Pouvez-vous m'aider à comprendre ce qu'il ne va pas s'il vous plaît ?

(Les informations contenues dans mon fichier ne sont pas confidentielles)

Merci pour le temps que vous prendrez pour m'aider ;)

16pile-a-lire.zip (693.46 Ko)

Bonjour,

Mais ce matin, quand je veux enregistrer un nouveaux livres, j'ai une erreur d'automation "....

En regardant en vitesse, je pense que vous avez mis votre tableau au format structuré et le bug vient de là
Si vous convertissez votre tableau en plage, le problème est solutionné
Si vous restez au format structuré il faut revoir les codes

Dites moi si vous voulez rester dans ce format.

Bonjour, Salut Dan

Autre solution à priori en gardant le TS

Vous sélectionner la ligne 682 celle après la dernière enregistrée

CTRL+MAJ+Flèche vers le bas pour sélectionner toutes les lignes du dessous jusqu'à la fin

Clic droit -> Supprimer (les lignes)
Puis, les lignes vierges étant toujours sélectionnées dans le groupe Edition -> Effacer -> Effacer tout

A tester

Nota : pour moi, il est dommage de ne pas se servir du TS (Tableau Structuré)

Exemple pour le tri dans l'USF "Form_Livres" l'ors de l'ajout

    'Trier par ordre alphabétique
    With ws_PAL.ListObjects("Tableau1")
      .Sort.SortFields.Clear
      .Sort.SortFields.Add2 Key:=.Range("Tableau1[Titre]"), SortOn:=xlSortOnValues, _
          Order:=xlAscending, DataOption:=xlSortNormal
      With .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
    End With

A+

Re

@BrunoM45 :

Vous sélectionner la ligne 682 celle après la dernière enregistrée

Oui j'ai testé ce truc là en me disant qu'il y avait une crasse quelque part mais apparemment le problème restait entier.

Le code buguait toujours sur la ligne .cells(ligne_coller, 1)=textbox_titre

A voir si le demandeur a toujours le souci ou pas

Bonjour, Dan et BrunoM45,

Tout d'abord merci à vous 2 d'avoir prit le temps de regarder mon fichier et d'essayer de m'aider.

j'ai testé la méthode de BrunoM45 mais effectivement le problème est toujours là :/

J'aimerai en effet rester en tableau structuré si possible mais étant novice (j'ai regardé des tutos youtube par-ci par-là pour réussir à construire mon fichier) je ne m'y connais pas du tout. Pouvez vous m'aidez s'il vous plaît ?

Merci à vous !

Edit : J'ai modifié le code pour ajouter le tri alphabétique en utilisant le tableau structuré, merci :)

Re

Faites ceci dans votre userform

1. Rempalcez le code Initialize

Private Sub UserForm_Initialize()
Dim i As Integer
'Jours
For i = 1 To 31
    ComboBox_Jour.AddItem i
Next i
 'Mois
For i = 1 To 12
    ComboBox_Mois.AddItem i
Next i
 'Années
For i = 1900 To 3000
    ComboBox_An.AddItem i
Next i
End Sub

2. remplacez le code Private Sub Cmd_enr_Click() par celui ci-dessous

Private Sub Cmd_enr_Click()
Dim lstrw As Long
Dim ligne_coller As Long
Dim date_livre As Date

'Vérifier qu'il y a un titre et l'auteur
If TextBox_Titre.Value = "" Or TextBox_Auteur = "" Then
    MsgBox ("Veuillez entrer le titre et l'auteur du livre")
    Exit Sub
End If

Call load_public_variables

With ws_PAL.ListObjects("Tableau1")
    If .ListRows.Count = 0 Then
        .ListRows.Add: ligne_coller = 1
    Else: .ListRows.Add: ligne_coller = .ListRows.Count
    End If
    With .DataBodyRange
        .Item(ligne_coller, 1) = TextBox_Titre.Value
        If TextBox_Tome = vbNullString Then
            .Item(ligne_coller, 5) = "/"
            Else
            .Item(ligne_coller, 5) = TextBox_Tome.Value
        End If
        .Item(ligne_coller, 6) = TextBox_Auteur.Value
        .Item(ligne_coller, 7) = TextBox_Edition.Value
        .Item(ligne_coller, 8) = TextBox_Collection.Value
        'Identifier date_livre
        If ComboBox_Jour.Value <> vbNullString And ComboBox_Mois.Value <> vbNullString And ComboBox_An.Value <> vbNullString Then
            date_livre = DateSerial(ComboBox_An.Value, ComboBox_Mois.Value, ComboBox_Jour.Value)
            .Item(ligne_coller, 9) = date_livre
        End If
        .Item(ligne_coller, 10) = TextBox_Pages.Value
        .Item(ligne_coller, 11) = TextBox_Resume.Value
   End With

    'Trier par ordre alphabétique
    .Sort.SortFields.Clear
    .Sort.SortFields.Add2 Key:=Range("Tableau1[Titre]"), SortOn:=xlSortOnValues, _
          Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
End With

'Selectionner la ligne A1
ws_PAL.Cells(1, 1).Select

Call effacer
End Sub

3. Ajouter un code pour effacer l'usf. cela évitera de la fermer après enregistrement et de la réouvrir

Private Sub effacer()
Dim c As Control

For Each c In Me.Controls
    Select Case TypeName(c)
        Case "TextBox"
            c.Value = vbNullString
        Case "ComboBox"
            c.Value = vbNullString
            c.ListIndex = -1
    End Select
Next c
End Sub

Faites un test

Rem : j'ai pas compris pourquoi vous déclarez vos variables dans le module alors qu'elles ne servent que dans votre USF. D'autant qu'à chaque enregistrement vous relancer un code inutilement. Cela pourrait être nettement plus simple....

Re,

j'ai testé la méthode de BrunoM45 mais effectivement le problème est toujours là :/

Etrange, mois cela à fonctionné

J'ai peut enregistré, fermé le fichier et réouvert avant de m'en servir

Bon je vous laisse entre les bonnes mains de Dan

Re,

@BrunoM45, je ne sais pas pourquoi cela n'a pas fonctionné pour moi. Apparament pour Dan non plu cela n'a pas solutionné le problème ;).

@Dan

Merci pour le code, je l'ai remplacé. Je n'ai plus de message d'erreur mais excel crash dès que je clique sur enregistrer :/

Pour les public variables franchement je ne sais pas. En fait j'ai suivi des tuto youtube comme je l'ai dit lors de mon précédent message donc je ne peux pas te fournir d'explications ^^

Merci encore à vous deux pour vos réponse.

Bonsoir,

Bug sur la feuille "en interne", une solution :
ouvrir un classeur vierge,
copier les données de la feuille PAL,
coller les données sur la feuille du classeur vierge,
renommer la feuille PAL en PAL2 par exemple et la glisser en dernière position pour "archives",
renommer la feuille du classeur vierge en "PAL"
copier/Déplacer la feuille du classeur vierge vers le classeur d'origine.

Enjoy !

Il reste tout de même "des problèmes" sur cette nouvelle feuille :
Sélectionnez la première cellule du tableau A4 puis faites : majuscule + CTRL+ FIN et voyez la zone "active" de votre feuille, il y a trop de colonne et trop de ligne comme l'indiquait BrunoM45, vous pouvez les supprimer et pour que cela soit pris en compte il faut enregistrer/quitter et revenir . Vous verrez alors que l'ascenseur verticale correspond à la taille de la feuille.

Sinon le fichier :

Avec trois livres LoureeD !

@ bientôt

LouReeD

Re

Ok je viens d'avoir la même chose. Il faut refaire le tableau structuré

Faites d'abord ceci (ce que BrunoM45 avait d'ailleurs fait aussi) :

- sélectionnez la ligne 682 jusque la dernière ligne de la feuille
- click droite puis choisir "Supprimer"
- Sélectionner une cellule du tableau (par exemple A5)
- dans le menu excel, cliquez sur "création tableau"
- à gauche, cliquez sur "convertir en plage" (cela va enlever le format structuré) et confirmez pour repasser en format normal

Ensuite on refait le tableau au format structuré
- sélectionnez A4 à O682 (donc le tableau complet)
- allez dans le menu accueil et cliquez sur l'icone "mettre sous forme de tableau"
- choisissez un tableau puis dans la fenêtre "creer un tableau", cochez bien la case "mon tableau a des entêtes"

Une fois terminé refaite un test

C'est plus simple qu'avec la feuille vierge !

@ bientôt

LouReeD

Re à vous 2 :)

@LouReeD

Merci beaucoup pour ton fichier :d Au début, je ne comprenais pas pourquoi mes livres ne s'enregistraient pas avant de voir que tu avais modifier le code dans VBA. Je me suis retrouvée avec 10 livres LouReeD xD

@Dan

Cela me renvoie une erreur 9S. Mais bon étant donné que le fichier de LouReeD fonctionne, je peux mettre comme résolu le topic .

Un grand merci à vous tous pour votre rapidité, votre gentillesse et votre expertise ! C'est beau à voir de nos jours ;)

3

Bonjour,

merci pour votre retour et remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "erreur automation methode defaut objet range echoue"