Erreur exécution 1004

Bonjour,

je rencontre un soucis lors de la mise en forme d'un tableau

En effet à la fin de mes informations exportées je souhaite que toutes ces informations se mettent en forme

aussi j'ai le code suivant

    .ListObjects.Add(xlSrcRange, .Range("$A$3").CurrentRegion, , xlYes).Name = NomTable
    .ListObjects(NomTable).TableStyle = "TableStyleMedium5"

celui ci me met bien tout en forme mais me génère toutefois l'erreur indiquée en titre

quelqu'un pourrait il m'indiquer pourquoi?

merci par avance

Bonjour,

Je n'ai eu aucune erreur avec ce code ... MAIS il faut que les données ne soient pas déjà organisées en tableau (listobject) sinon cela donne erreur 1004 et le code s'arrête sur

.ListObjects.Add(xlSrcRange, .Range("$A$3").CurrentRegion, , xlYes).Name = NomTable
Sub test()

NomTable = "matable"
With ActiveSheet
    .ListObjects.Add(xlSrcRange, .Range("$A$3").CurrentRegion, , xlYes).Name = NomTable
    .ListObjects(NomTable).TableStyle = "TableStyleMedium5"
End With

End Sub

Donc une solution serait alors de faire une gestion d'erreur ... s'il n'y a qu'une table par onglet, tu peux écrire

Sub test()

NomTable = "matable"
On Error Resume Next
With ActiveSheet
    .ListObjects.Add(xlSrcRange, .Range("$A$3").CurrentRegion, , xlYes).Name = NomTable
    .ListObjects(1).Name = NomTable
    .ListObjects(1).TableStyle = "TableStyleMedium5"
End With

End Sub

Merci à vous Steelson

j'ai tenté mais cela ne me permet pas de résoudre mon soucis

Aussi, voici un fichier exemple (test)permettant de générer un fichier (Tbd_Projets vierge) avec des données

5tbd-projets.xlsm (9.83 Ko)

et qui a la fin devrait se mettre en forme si possible.

mais avec le problème mentionné venant du code cité

    .ListObjects.Add(xlSrcRange, .Range("$A$3").CurrentRegion, , xlYes).Name = NomTable
    .ListObjects(1).Name = NomTable
    .ListObjects(1).TableStyle = "TableStyleMedium5"
12test-a-moi.xlsm (98.49 Ko)

Tu ne peux pas créer un tableau avec une double ligne d'en-tête dont la première est fusionnée ... car .Range("$A$3").CurrentRegion englobe aussi la ligne 1

Conclusion, commence la ligne d'en-tête à la ligne 3 et non la 2.

et tu ne peux pas non plus fusionner les cellules G et H dans un tableau

Bonjour Steelson,

merci pour votre retour mais je ne suis pas sur d'avoir tout bien compris

j'ai enlever tous les merges

.Range("A1:U1").Merge
'.Range("A1").HorizontalAlignment = xlCenterAcrossSelection
'.Range("G3:H3").Merge

je commence ma ligne d’Entêté à la ligne 3

mais le soucis est similaire. cela me génère le tableau comme je le souhaite sous format tableau

7test-a-moi.xlsm (98.68 Ko)

mais avec toujours le meme code erreur

Ce n'est plus la même erreur.

Cette fois ci ton tableau est bien créé ... mais NomTable est vide et ne peut pas être attribué au Tableau qui s'appelle Tableau1 par défaut !

A noter que rien n'est défini en H3

capture d ecran 56

oui pour H3 je vais résoudre ce soucis autrement après.

mais je ne comprends pas car de base le fichier tbd_projets est vierge avec aucun tableau présent.

Avec un nom de tableau cela fonctionne (et des cellules non fusionnées en ligne 3 - pour la ligne 1 ce n'est pas grave - et avec des entêtes lignes 3)

capture d ecran 57

mais je ne comprends pas car de base le fichier tbd_projets est vierge avec aucun tableau présent.

L'instruction suivante s'est partiellement déroulée

.ListObjects.Add(xlSrcRange, .Range("$A$3").CurrentRegion, , xlYes).Name = NomTable

elle s'est arrêtée à l'affectation du nom qui était vide

.Name = NomTable

Ok mais j'ai pourtant defini en amont

Dim NomTable As String

aussi je ne comprends pas quel est le soucis

Il est défini mais il est vide ! Fais précéder la définition de la table par

MsgBox NomTable

et tu verras qu'il ne contient rien !

j'ai effectivement réussi en mettant un simple NomTable = "1"

mais je pense qu'il y a plus adapté comme solution non?

Globalement, ton code est assez alambiqué en effet ! Je n'ai regardé que la partie qui posait problème (et qui accumulait 3 problèmes)

Bonjour,

.Columns("A:U").AutoFit
        .Range("a4:a65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        NomTable = "XXXX"
        .ListObjects.Add(xlSrcRange, .Range("$A$3").CurrentRegion, , xlYes).Name = NomTable
        '.ListObjects(1).Name = NomTable
        .ListObjects(1).TableStyle = "TableStyleMedium5"

@ steelson

Globalement, ton code est assez alambiqué en effet !

j'ai fais aussi bien dans la mesure de mes connaissances et aides diverses

cela fonctionne toutefois mais si vous êtes en mesure de me l'optimiser en générant le même résultat je suis toutefois preneur

mais j'avoue que celui ci m'aura pris un certains temps..

Globalement, ton code est assez alambiqué en effet !

j'ai fais aussi bien dans la mesure de mes connaissances et aides diverses

mais j'avoue que celui ci m'aura pris un certains temps..

et c'est une excellent "école", très bonne façon d'apprendre ...

L'instruction suivante n'a plus d'intérêt, son seul intérêt était dans le cas d'une gestion d'erreur n'ayant pas eu la macro complète et l fichier au départ

.ListObjects(1).Name = NomTable

ton code d'origine est très bien, l'erreur venait non pas du code mais de la fusion de cellules puis l'absence de nom.


@ Jean-Eric : je ne suis sûr qu'on ait besoin de

.Columns("A:U").AutoFit

puisque le fait de le mettre en tableau suffit à reformater les colonnes.

exact j'ai pu enlever les deux lignes mentionnées et tout reste ok merci à vous

Rechercher des sujets similaires à "erreur execution 1004"