[VBA] Erreur d'automation [Résolu/Fermé]

Signaler
-
Messages postés
17380
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
-
Bonjour,

J'ai une erreur d'automation avec pour commentaire "s'est déconnecté de ses clients"
Je ne sais pas du tout à quoi cela peut correspondre étant donné que c'est sur de la mise en forme de cellule.

Ci-dessous le code :

    On Error GoTo ErrorHandler
Recommencer:
    Sheets(Feuille).Activate
    Range(Sheets(Feuille).Cells(LD, CD), Sheets(Feuille).Cells(LF, CF)).Select
    Sheets(Feuille).ListObjects.Add(xlSrcRange, Sheets(Feuille).Range(Sheets(Feuille).Cells(LD, CD), Sheets(Feuille).Cells(LF, CF)), , xlYes).Name = _
        Titre
    Range(Sheets(Feuille).Cells(LD, CD), Sheets(Feuille).Cells(LF, CF)).Select
    Sheets(Feuille).ListObjects(Titre).TableStyle = "TableStyleLight2"
    Sheets(Feuille).ListObjects(Titre).ShowTotals = True
    Exit Sub
ErrorHandler:
    Randomize
    Titre = Titre & Int(Rnd) & Int(Rnd) 'Traitement de l'erreur sur le nom de tableau similaire
    GoTo Recommencer




L'erreur s'affiche sur le ActiveSheet.ListObjects(Titre).TableStyle = "TableStyleLight2"

7 réponses

Ou sur le .ShowTotals
Messages postés
17380
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 091
Bonjour,
1°) Je suppose que Feuille est initialiser avant ?
2°) Pour une lecture plus simple, supprimer tout les Sheets(Feuille) puisque c'est la feuille active.
3°) ListObjet, comme son nom l'indique est un objet, faut donc le traiter comme un Objet
Dim listOb as Listobjet  
set ListOb = ListObjects.Add(xlSrcRange, Range(Cells(LD, CD), Cells(LF, CF)), , xlYes).Name = Titre  
ListOb.TableStyle = "TableStyleLight2"  
ListOb.ShowTotals = True

4°) Plutôt que de sauter sur une erreur vaux mieux l'éviter en testant si cet objet existe déjà, ou quelque chose comme ça.
5°) On ne sort pas d'une détection d'erreur par un goto, si trop d'erreurs à la suite fait sauter la pile.
le code est : Resume Recommencer
Vu le peu de renseignement que tu donne impossible d'en dire plus.
A+

Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
J'ai une erreur "Objet requis".
Ce que je voulais faire dans cette macro :
Sur une plage de donnée, créer un tableau avec comme style TableStyleLight2 et avec les totaux.
Messages postés
17380
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 091
Beh oui... voir poste précédant, remarque 3
J'ai repris exactement le code que tu m'as donné. C'est avec ce code que j'ai cette erreur d'Objet requis.
Pourquoi est ce que j'ai cette erreur ?
Voila le code que j'ai.

Dim ListOb As ListObject

Sheets(Sheet).Activate
Range(Cells(LD, CD), Cells(LF, CF)).Select
Set ListOb = ListObjects.Add(xlSrcRange, Range(Cells(LD,CD), Cells(LF, CF)), , xlYes).Name = Titre
ListOb.TableStyle = "TableStyleLight2"
ListOb.ShowTotals = True
Exit Sub

J'me suis pas pris la tête avec un objet qui aurait le même nom pour le moment
Messages postés
17380
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 091
sur quel ligne ?
A partir de
Set ListOb = ListObjects.Add(xlSrcRange, Range(Cells(LD,CD), Cells(LF, CF)), , xlYes).Name = Titre
Lermite22, pas d"idée ?
Personne ne sait comment résoudre mon problème ?
(Je relance une dernière fois, puis j'abandonne)
Messages postés
17380
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 091
Je n'avais pas vu la fin de cette ligne, essaye avec..
Set ListOb = ListObjects.Add(xlSrcRange, Range(Cells(LD,CD), Cells(LF, CF)), , xlYes)
ListOb.TableStyle = "TableStyleLight2"
ListOb.ShowTotals = True
ListOb.Name = Titre
Et vérifie que tes variables sont initialisées.
Toujours l'erreur "Objet requis".
j'ai vérifié, toutes mes variables sont initialisées.
Messages postés
17380
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 091
Bon, mon exemple précédant est bon sauf les paramètres, mais je pensais que tu les avais vérifier.
Un code qui fonctionne ??..
Dim listOb As ListObject 
    Set listOb = ActiveWorkbook.Sheets(3).ListObjects.Add(SourceType:=xlSrcRange, Source:=Range("B3:G18")) 
    listOb.Name = "Démo Titre" 
    listOb.TableStyle = "TableStyleLight2" 
    listOb.ShowTotals = True 

Adapter le N° ou nom de la feuille et la plage.
Pour passer sans erreur vaux mieux que la feuille de destination soit active, sinon la nommer dans la plage.
A+
PS : Si tu veux modifier les paramètres de la liste après, tu peu employer sont Nom ou son Index ou déclarer la variable ListOb en public (dans un module.bas)

Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Quand je lance une fois, cela fonctionne.
En revanche, si je supprime la feuille, que je refais un tableau et que je réexécute la macro j'ai le message d'erreur suivant "L'objet invoqué s'est déconnecté de ses clients" et c'est comme-ci la macro avait sélectionner le tableau + 1 ligne en dessous.
C'est bon en fait, j'avais rééxécuté ma premiere macro.
Tout fonctionne normalement.
Merci
Messages postés
17380
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 091
Tant mieux, content de t'avoir aidé.
D'après ton premier code tu a un problème pour nommer tes tableaux !!
Avec ce code, plus d'erreur sur cette variable..
Dim Nom As String 
    With ActiveWorkbook.Sheets(3) 
        Nom = "Démo Liste " & .ListObjects.Count + 1

A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.