XL 2016 la méthode Add de l'Objet Listrows à échoué

Hamadou

XLDnaute Nouveau
Bonsoir ! Je besoin vraiment d'aide sur mon le message d'erreur ci:"la méthode Add de l'Objet Listrows à échoué " qui l'arrêt immédiat du classeur
 

Pièces jointes

  • BaseDonnees.xlsm
    26.8 KB · Affichages: 16

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous,
Chez moi, en version 2007, le bouton Ajouter ne pose pas de problème (après il y a quelques autres bugs mais sans plantage d'excel)
j'essaie en 2021 ...
Là ça plante à la fermeture du formulaire (l'ajout s'étant fait à peu près correctement (erreurs sur les colonnes comme avec 2007)
A bientôt
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

J'ai ajouté un bouton qui ouvre UserForm1.

Je clique sur le bouton que j'ai ajouté, ça ouvre UserForm1.
Je clique sur le bouton "Ajouter", ça ouvre fmAjout.
Je rempli chacun des champs (sauf les listes puisqu'elles sont vides) puis clique sur le bouton "Valider", un message me demande si je veux ajouter les données, je dis que oui et ça écrit les données dans une nouvelle ligne en fin de tableau.

En revanche, ça n'écrit pas toutes les données au bon endroit, à cause du double Tag 4.
Ca écrit la date dans la colonne "Prenom", le lieu dans "Date", le tél dans "Date", le pays dans "Sexe"...

Il y a d'autres soucis :
- il manque un champ pour le sexe dans fmAjout.
- il y a le problème classique sur les dates (genre 01/02/23 qui devient 02/01/2024).


Mais aucun plantage chez moi. ;)
Quand tu essayes d'ajouter une ligne dans ton vrai fichier, la feuille n'est-elle pas protégée ?

Est-ce que c'est normal de faire Call AffichageList(ListBox1, FeuilBD, "Tableau1") alors que AffichageList est déclarée en tant que fonction ???
 

Pièces jointes

  • BaseDonnees.xlsm
    35.6 KB · Affichages: 1
Dernière édition:

Hamadou

XLDnaute Nouveau
J'utilise aussi la version Excel 2016 mais lorsque je lance Userform 1, quand je clique sur ajouter puis sur valider le classeur se ferme se ferme par contre quand je lance le formulaire ajout et que je clique sur valider, il y a pas de blocage
 

patricktoulon

XLDnaute Barbatruc
bonjour @Hamadou
la prochaine fois que tu modifie un fichier tel qu'on te le donne modifie tout les éléments à modifier
j'ai remis les bon indexs dans les tags des controls
j'ai changé les noms que tu n'avais pas fait dans le code pour les userforms

chez moi les deux userforms fonctionnent
la prochaine fois je file des coups de batons 🤣
 

Pièces jointes

  • BaseDonnees.xlsm
    26.6 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
re
Bonjour @TooFatBoy
Est-ce que c'est normal de faire Call AffichageList(ListBox1, FeuilBD, "Tableau1") alors que AffichageList est déclarée en tant que fonction ???

réponse :
non cette fonction n'est certainement pas de moi tout du moins comme ça
pour la simple et bonne raison déjà que je n'utilise jamais !!! l'object listbobject pour chopper un TS
et j'ai expliqué tellement de fois pourquoi que ça devrait être connu de tous
donc... c'est encore @Hamadou qui joue avec des clés à molette pour manipuler une horlogerie

si c'est moi ou mon code original la fonction s’appellerait comme ceci:
AffichageList(ListBox1, range("Tableau1"))
1° pas de call
2° et oui c'est une fonction mais elle est appelée comme une sub
3° ça ne gène en rien le bon fonctionnement
4°d'ailleurs je l'aurais plutôt appelé "RemplissageList" si la base du code est de moi c'est certainement comme ça que j'ai du l’appelé
j'explique pourquoi
c'est tout simplement par ce que
sur certaines version excel il faut que la feuille contenant le TS soit active
ou
il faut justement prefixé le TS de son parent (la feuille)
moi je peux être sur n'importe quelle feuille active

si je fait :
msgbox range("Tableau1").address
j'aurais l'adresse du databodyrange du ts automatiquement

si je veux le listbobject
je fait:
set ts=range("Tableau1").listobject

pour la faire courte je passe toujours par la collection range
autrement dit je n'ai pas besoins de l'object feuille (parent)
si je veux l'entête avec
je fait
MsgBox Range("Tableau1[#all]").Address
ou au pire
MsgBox Range("Tableau1").ListObject.Range.Address
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Merci pour ta réponse très complète.

Je suis bien sûr 100 % d'accord avec toi : utiliser une syntaxe qui oblige à mettre le nom de la feuille pour utiliser un TS est évidemment une hérésie !


Il me reste encore une petite question. ;)
1° pas de call
2° et oui c'est une fonction mais elle est appelée comme une sub
3° ça ne gène en rien le bon fonctionnement
Tu dis "pas de call", mais qu'on écrive call ou pas, ça ne change rien me semble-t-il. Me trompé-je ?
 

Hamadou

XLDnaute Nouveau
bonjour @Hamadou
la prochaine fois que tu modifie un fichier tel qu'on te le donne modifie tout les éléments à modifier
j'ai remis les bon indexs dans les tags des controls
j'ai changé les noms que tu n'avais pas fait dans le code pour les userforms

chez moi les deux userforms fonctionnent
la prochaine fois je file des coups de batons 🤣cC'est vrai il y a qu'à même quelques erreurs à corriger sur l'index du tag et le nom du tableau mais près avoir corrigé cela ça renvoie toujours la même message que ci dessus. c'est également le message qui s'affiche avec le classeur qu vous avez renvoyé j'ignore comment ça se passe
 

Hamadou

XLDnaute Nouveau
re
Bonjour @TooFatBoy


réponse :
non cette fonction n'est certainement pas de moi tout du moins comme ça
pour la simple et bonne raison déjà que je n'utilise jamais !!! l'object listbobject pour chopper un TS
et j'ai expliqué tellement de fois pourquoi que ça devrait être connu de tous
donc... c'est encore @Hamadou qui joue avec des clés à molette pour manipuler une horlogerie

si c'est moi ou mon code original la fonction s’appellerait comme ceci:
AffichageList(ListBox1, range("Tableau1"))
1° pas de call
2° et oui c'est une fonction mais elle est appelée comme une sub
3° ça ne gène en rien le bon fonctionnement
4°d'ailleurs je l'aurais plutôt appelé "RemplissageList" si la base du code est de moi c'est certainement comme ça que j'ai du l’appelé
j'explique pourquoi
c'est tout simplement par ce que
sur certaines version excel il faut que la feuille contenant le TS soit active
ou
il faut justement prefixé le TS de son parent (la feuille)
moi je peux être sur n'importe quelle feuille active

si je fait :
msgbox range("Tableau1").address
j'aurais l'adresse du databodyrange du ts automatiquement

si je veux le listbobject
je fait:
set ts=range("Tableau1").listobject

pour la faire courte je passe toujours par la collection range
autrement dit je n'ai pas besoins de l'object feuille (parent)
si je veux l'entête avec
je fait
MsgBox Range("Tableau1[#all]").Address
ou au pire
MsgBox Range("Tableau1").ListObject.Range.Address
la fois passé vous m'avez proposé une autre méthode qui marche à défaut qu'il n'affiche pas aussi les entêtes du tableau donc c'est pour cela je essayer de modifier le code pour obtenir les entêtes mais je vais aussi tester cette méthode
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 289
Membres
103 170
dernier inscrit
HASSEN@45