XL 2019 listrows.add erreur 1004

FLOW312020

XLDnaute Nouveau
Bonjour à tous,

Après de nombreuses tentatives, je n'arrive pas résoudre mon problème. Lorsque la macro arrive sur la ligne "Set oLigneDestination" j'ai l'erreur 1004 qui apparait: Nous ne pouvons effectuer cette action car cela impliquerait le déplacement de cellules d'un tableau de votre feuille de calcul.

Je me doute que le problème vient du fait qu'en dessous de mon tableau dans lequel j'applique le "Listrows.add", j'ai un autre tableau deux lignes plus bas. En effet sans avoir de tableau sous ce tableau, la macro fonctionne parfaitement. Pour palier au problème j'ai créé une variante du code dessous pour qu'une ligne soit insérée par la macro avant d'appliquer le listrows.add. La ligne s'insère bien mais le problème persiste avec le même code erreur. Idem en ajoutant AlwaysInsert:=True après le .add

J'espère que vous saurez m'aider par ce que là pour le coup je sèche complet!
ps: je débute plus ou moins en vba ou du moins j'ai encore beaucoup de choses à apprendre

VB:
Sub Ajoute_Ligne(Contenu As String, onomTableau As ListObject)
    ' Ajoute les informations de la LigneSource dans le tableau de destination
   
    Dim PositionLigneDestination As Long
    Dim oLigneDestination As ListRow
   
    Set oLigneDestination = onomTableau.ListRows.Add
   
    PositionLigneDestination = oLigneDestination.Index + 1

    onomTableau.Range.Cells(PositionLigneDestination, onomTableau.ListColumns(1).Index) = Contenu
   
    Set oLigneDestination = Nothing
End Sub
Merci
 
Dernière édition:

cp4

XLDnaute Impliqué
Bonjour @FLOW312020 ,

Si c'est sur la feuille, c'est insert voir ici
VB:
Sub inserer()
Rows("7:7").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
Bonne journée.
 

ChTi160

XLDnaute Barbatruc
Bonjour FLOW312020
Bonjour le Fil(cp4) ,le Forum
En regardant la procédure #1 , je me suis dit que la Ligne Cible ne doit elle pas être définie ainsi
VB:
Set oLigneDestination = onomTableau.ListRows.Add   'Ici on ajoute une Ligne
    PositionLigneDestination = oLigneDestination.Index 'Donc Sans le +1
ou plus simplement
VB:
Set oLigneDestination = onomTableau.ListRows.Add  
       onomTableau.Range.Cells(oLigneDestination.index, onomTableau.ListColumns(1).Index[Code]
Non Testée
il manque peut être aussi une référence a une feuille Cible ????
Bonne journée
jean marie
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Pourquoi diable utiliser la propriété Range du ListObject au lieu de celle du ListRow ?
Mais ceci n'explique pas par quoi est empêché le Add
S'il n'y avait pas ce problème le tout tiendrait en une seule instruction :
VB:
Sub Ajoute_Ligne(ByVal Contenu As String, ByVal onomTableau As ListObject)
   onomTableau.ListRows.Add(AlwaysInsert:=True).Range(1, 1).Value = Contenu
   End Sub
Il faudrait faire la manoeuvre d'insérer une ligne jusqu'à ce qu'on y arrive (est-ce que la dernière cellule réputée utilisée serait arrivée jusqu'à la dernière de la feuille ?) et une fois trouvé, le refaire une dernière fois sous enregistrement d'une nouvelle macro, puis étudier le code …
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas