Transférer une variable tableau dans une feuille de calcul - Erreur 1004

Bonjour,

Je travaille sur une macro qui a pour but de mettre à jour une base de donnée à partir d'une liste de lignes sur un autre classeur. Les fichiers étant un peu long ( environ 10 000 lignes), je suis passé par des variables tableaux pour éviter l'activation des classeurs / la sélection de cellules, et tout fonctionne nickel sauf pour la dernière étape : réintroduire la variable tableau de la base dans la feuille de calcul dédiée. L'erreur 1004 : "Erreur définie par l'application ou par l'objet" apparaît sans que je puisse trouver de solutions.

Le classeur base de donnée est protégé, donc je lève la protection en début de macro. La syntaxe est censée être bonne puisque je l'ai récupéré d'une macro qui fonctionne. Le tableau que je cherche à transférer est de la même taille que la plage de cellule de destination. J'ai essayer différentes approches de contournement : créer une variable range pour y affecter le tableau, utiliser un With-end With, etc, rien ne marche.

Je vous transmet le fichier de la macro ainsi que le passage ou ça bloque ( ligne surlignée), merci d'avance pour votre aide.

' TRANSFERER LES LIGNES DES TABLEAUX SUR LES CLASSEURS

ReDim tab_base_final(1 To c_base - 2, 1 To 29)
For i = 1 To c_base - 2
    For j = 1 To 29
        tab_base_final(i, j) = tab_base(i, j)
    Next
Next

wb_base.Activate
Sheets(1).Select
Range("A2:AC" & c_base - 1).Value = tab_base_final 'je colle "c_base - 2 lignes à partir de la ligne 2 --> dernière ligne = c_base - 1
Range("A2:AC" & c_base - 1).Value = tab_base_final
  • tab_base est la variable tableau que j'utilise pour récupérer toutes les lignes de la base de données mise à jour,
    volontairement trop grande car le nombre de lignes final n'est pas connu à l'avance;
  • c_base - 2 correspond au nombre de lignes de la base de donnée mise à jour, contenant 29 colonnes;
  • tab_base_final est une variable tableau que je crée une fois que la base de donnée est mise à jour dans la variable tableau tab_base, et qui a exactement le nombre de lignes de la nouvelle base.
  • wb_base est le workbook dans lequel se trouve la base de donnée, qui est sur la feuille 1.

Bonjour Jlesc,

D'un côté tu as un tableau tab_base_final(), soit ReDim tab_base_final(1 To c_base - 1, 1 To 29)

De l'autre une variable tab_base_final, soit Range("A2:AC" & c_base - 1) = tab_base_final

Quelle valeur a t'elle? Elle ne fait aucune référence à ton tableau. Pour cela elle devrait à sa droite entre parenthèse avoir une valeur.

Qu'en penses tu?

Je ne sais pas qu'elle est sont les différences d'usage et de signification des variables "tableau" et "tableau()", cependant via l'explorateur de variables locales, je peux vérifier que tab_base_final est bien un tableau de variant avec c_base-2 lignes et 29 colonnes, et que ce tableau est correctement rempli.

Dans une autre macro, avec un tableau de variant similaire, la syntaxe "Range("").Value = tab_etc" fonctionnait très bien, et ce sans parenthèses à côté du nom du tableau sur la ligne en question.

J'ai essayé avec les lignes Range("A2:AC" & c_base - 1).Value = tab_base_final() et Range("A2:AC" & c_base - 1) = tab_base_final() ça ne marche pas non plus.

Quelle valeur tu mettrait entre parenthèses?

J'ai trouvé la solution !

L'erreur ne venait pas du code mais du contenu de certaines cellules que je souhaitais transférer. Certaines cellules comportaient des "=> Faire ceci faire cela", et les caractères "=>" interrompaient le transfert. Solution : retraiter les cellules concernées à la main, ou celle adoptée dans mon cas : supprimer la colonne concernée (toutes les cellules concernées sont dans une même colonne commentaire) de la variable tableau, ce qui transfère un vide à la place.

Pas de problème de syntaxe donc!

Bonjour,

Comment en es-tu arrivé à cette conclusion que les caractères => perturbait le programme ?

Merci

A+

Bonsoir Jlesc,

J'ai essayé avec les lignes Range("A2:AC" & c_base - 1).Value = tab_base_final() et Range("A2:AC" & c_base - 1) = tab_base_final() ça ne marche pas non plus.

Si tu fais tab_base_final(), tu n'as aucune valeur entre les parenthèses. Forcément que cela ne marche pas.

Un tableau est indicé. Si tu lui donnes pas un indice ou chercher, il ne pourra pas renvoyer la valeur liée à cet indice dans ton Range("A2:AC"....)

Si tu lui demandes d'aller chercher par exemple la valeur correspondante au 10 ième indice, il te renverra bien celle là. Et pas celle du 9 ième indice ou du 11 ième.

Ensuite on ne peut pas rentrer un => Faire ceci... dans une cellule car tu aurais un message d'erreur. Excepté si cette cellule est formatée en texte. Ou sinon si tu l'insères comme '=> Faire....

Bonjour,

Comment en es-tu arrivé à cette conclusion que les caractères => perturbait le programme ?

Merci

A+

En essayant de transférer la variable tableau sur un fichier vierge, je me suis rendu compte que le message d’erreur persistait, mais qu’une partie du tableau s’était tout de même transféré. Du coup je suis allé chercher la cellule à partir de laquelle le transfert bloquait, et après quelques tests, j’ai compris que c’était le contenu de certaines cellules qui générait l’erreur, à savoir les cellules commençant par « => ». Une fois le contenu modifié / supprimé, ça tournait tout seul..!

Bonsoir,

Effectivement je me suis rendu compte également dans d'autres situations que certains caractères perturbaient le déroulement de la macro dans cette situation.

Ce qui m'intéresse c'est l'origine du document en question est-ce une rédaction de ta part ou provient-il d'une source complexe (une requête SQL ou QUERY par exemple ? )

Merci.

A+

Pour être précis c’est un classeur Excel avec une mise en forme spécifique pour certaines colonnes (liste déroulantes, format date obligatoire, texte...), avec une protection.

Ce n’est donc pas une source complexe comme ce dont tu parles !

Rechercher des sujets similaires à "transferer variable tableau feuille calcul erreur 1004"