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 ;)
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 WithA+
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 Sub2. 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 Sub3. 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 SubFaites 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 ;)
Bonjour,
merci pour votre retour et remerciements !
@ bientôt
LouReeD