Limitation du nombre de caractères lors du transfert d'un Arraty dans un tableau

Le
FdeCourt
Bonjour,

Pourquoi Excel limite t-il le nombre de caractères qui peut être
transféré d'un array vers un tableau.

Par exemple :

Dim x(1 To 2)

For i = 1 To 2
x(i) = String(912, "x")
Next
[A1:A2] = x

me renvoi une erreur 1004
alors que si je met 911 x, cela passe.

Merci pour votre aide.

F.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Misange
Le #5326681
Bonjour,

Pourquoi Excel limite t-il le nombre de caractères qui peut être
transféré d'un array vers un tableau.

Par exemple :

Dim x(1 To 2)

For i = 1 To 2
x(i) = String(912, "x")
Next
[A1:A2] = x

me renvoi une erreur 1004
alors que si je met 911 x, cela passe.

Merci pour votre aide.

F.
Bonjour "F"


Ce n'est pas une limitation d'excel en soi mais un pb de mémoire.
Chez moi je peux aller jusqu'à 8203 sans pb, à 8204 ça coince.

--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

FdeCourt
Le #5326661
Ouch, c'est génant ca.
Donc une macro peut marcher sur un PC et pas sur l'autre.

Quand c'est une variable string, ca passe sans problème, mais pas
quand c'est un array.

Cela veut dire qu'il faut forcément passer par une boucle si on veut
être sur à 100% que la macro marchera partout (ce qui fait exploser le
temps d'execution de la macro !!!) ?

F.

On 28 mar, 13:26, Misange



Bonjour,

Pourquoi Excel limite t-il le nombre de caractères qui peut être
transféré d'un array vers un tableau.

Par exemple :

Dim x(1 To 2)

For i = 1 To 2
    x(i) = String(912, "x")
Next
[A1:A2] = x

me renvoi une erreur 1004
alors que si je met 911 x, cela passe.

Merci pour votre aide.

F.


Bonjour "F"

Ce n'est pas une limitation d'excel en soi mais un pb de mémoire.
Chez moi je peux aller jusqu'à 8203 sans pb, à 8204 ça coince.

--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !http://xlwiki.f ree.fr/wikihttp://www.excelabo.net- Masquer le texte des messages précéd ents -

- Afficher le texte des messages précédents -



Modeste
Le #5326641
Bonsour® Misange avec ferveur ;o))) vous nous disiez :

Pourquoi Excel limite t-il le nombre de caractères qui peut être
transféré d'un array vers un tableau.
Par exemple :
Dim x(1 To 2)
For i = 1 To 2
x(i) = String(912, "x")
Next
[A1:A2] = x
me renvoi une erreur 1004
alors que si je met 911 x, cela passe.


Ce n'est pas une limitation d'excel en soi mais un pb de mémoire.
Chez moi je peux aller jusqu'à 8203 sans pb, à 8204 ça coince.


;-P
chez moi ça va jusque 65509 !!!!

la façon dont Excel gère la mèmoire restera toujours pour moi un mystère :-((

XP Home SP2 Excel 2002
Memoire installée 512 Mo
Dispo 118,9 Mo
Virtuelle 2 Go
Virtuelle dispo 1,96

classeur vierge avec la macro citée en exemple et les formules INFO
en A3 la valeur de répétition (65509)
à noter le message obtenu n'est pas 1004 , mais erreur d'execution 7 mèmoire
insuffisante
Sub test()
Dim x(1 To 2)
For i = 1 To 2
x(i) = String([A3], "i")
Next
[A1:A2] = x
End Sub

NBCAR(A2] affichage 1823
info("memdispo") 1048576
info("memtot") 1874640
info("memutil") 826064


--
@+
;o)))


MichDenis
Le #5326621
Quoi qu'en pense Misange et Modeste,

Ceci ne fonctionne pas si les cellules ont des chaînes
de caractères importantes. (Tester avec 2303 caractères)

'---------------------------------
Sub test()
t = Feuil1.Range("A1:A10")
Feuil2.Range("A1:A10") = t
End Sub
'---------------------------------

Cependant, si tu boucles sur chacun des items du tableau,
le résultat y est ... et la procédure ressemble à ceci :

'----------------------------------
Sub test()
t = Feuil1.Range("A1:A10")
For a = 1 To UBound(t, 1)
Feuil2.Range("A" & a) = t(a, 1)
Next
End Sub
'----------------------------------

P.S- Je suis sur une vieille bécane, mais je serais surpris que le problème
observé ( erreur 1004 dans la procédure 1) relève d'un manque de mémoire !!!!

Voyons ce qu'en dise d'autres partipants ! ;-)))
Modeste
Le #5326561
Bonsour® MichDenis avec ferveur ;o))) vous nous disiez :



Quoi qu'en pense Misange et Modeste,
;o)))

C'est de la diversité que nait la lumière !!!

E pluribus unum
In varietate concordia

Voyons ce qu'en dise d'autres partipants ! ;-)))




--
--
@+
;o)))

MichDenis
Le #5326511
Et pour moduler un peu ma réponse, j'ai exécuté cette procédure
pour tenter de voir jusqu'à combien de caractères on pouvait aller
et à ma surprise, je me suis rendu jusqu'à 4000 caractères (ce n'est
pas une limite mais un arrêt volontaire)

'------------------------------
Sub test()
For a = 1 To 4000
Feuil1.Range("A1:A10") = Application.Rept("a", a)
t = Feuil1.Range("A1:A10")
For b = 1 To UBound(t, 1)
Feuil2.Range("A" & b) = t(b, 1)
Next
Next
End Sub
'------------------------------

Le hic, comment expliquer que ceci provoque une erreur 1004 avec
des cellules contenant 2303 caractères ? pourquoi ?
'-------------------------------
Sub test()
t = Feuil1.Range("A1:A10")
Feuil2.Range("A1:A10") = t
End Sub
'-------------------------------

Si Modeste continu de s'exprimer en latin, peut être qu'un des 2 Mgr
voudra bien traduire !




"MichDenis" %
Quoi qu'en pense Misange et Modeste,

Ceci ne fonctionne pas si les cellules ont des chaînes
de caractères importantes. (Tester avec 2303 caractères)

'---------------------------------
Sub test()
t = Feuil1.Range("A1:A10")
Feuil2.Range("A1:A10") = t
End Sub
'---------------------------------

Cependant, si tu boucles sur chacun des items du tableau,
le résultat y est ... et la procédure ressemble à ceci :

'----------------------------------
Sub test()
t = Feuil1.Range("A1:A10")
For a = 1 To UBound(t, 1)
Feuil2.Range("A" & a) = t(a, 1)
Next
End Sub
'----------------------------------

P.S- Je suis sur une vieille bécane, mais je serais surpris que le problème
observé ( erreur 1004 dans la procédure 1) relève d'un manque de mémoire !!!!

Voyons ce qu'en dise d'autres partipants ! ;-)))
Misange
Le #5326481
Quoi qu'en pense Misange et Modeste,

Ceci ne fonctionne pas si les cellules ont des chaînes
de caractères importantes. (Tester avec 2303 caractères)


salut Denis
Ben si pour le premier test : je teste sans problème ta procédure en
écrivant jusqu'à 8203 caractères exactement, pas un de plus en A1. Au
delà j'ai une erreur 1004
en revanche je peux aller bien audelà avec le second (pas testé jusqu'où)
Ma machine est plus musclée que celle de Geedee mais il est vrai que
j'ai un paquet de machins ouverts en même temps...

Voyons ce qu'en dise d'autres partipants ! ;-)))
voui !

--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

MichDenis
Le #5326471
Vous aurez compris que c'est cette procédure que j'aurais dû tester :

'----------------------------
Sub test()
For a = 1 To 4000
Feuil1.Range("A1:A10") = Application.WorksheetFunction.Rept("a", a)
t = Feuil1.Range("A1:A10")
Feuil2.Range("A1:A10") = t
Next
End Sub
'----------------------------

Une erreur de type 1004 apparaît lorsque a = 912 et ceci semble une limite ou un BUG ?
Allez savoir.
MichDenis
Le #5326461
| écrivant jusqu'à 8203 caractères exactement

Mais toi tu es sous excel 2007, voir mon dernier message
les autres versions (proablement 2000 à 2003) se limitent
à 912 caractères.



"Misange"
Quoi qu'en pense Misange et Modeste,

Ceci ne fonctionne pas si les cellules ont des chaînes
de caractères importantes. (Tester avec 2303 caractères)


salut Denis
Ben si pour le premier test : je teste sans problème ta procédure en
écrivant jusqu'à 8203 caractères exactement, pas un de plus en A1. Au
delà j'ai une erreur 1004
en revanche je peux aller bien audelà avec le second (pas testé jusqu'où)
Ma machine est plus musclée que celle de Geedee mais il est vrai que
j'ai un paquet de machins ouverts en même temps...

Voyons ce qu'en dise d'autres partipants ! ;-)))
voui !

--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Modeste
Le #5326431
Bonsour® MichDenis avec ferveur ;o))) vous nous disiez :

Si Modeste continu de s'exprimer en latin, peut être qu'un des 2 Mgr
voudra bien traduire !


je suis bien incapable de m'exprimer en :
Ojibwé, algonquin, chipewyan, innu-aimun, tahtlan, wendat, mohawk, salish

peut-etre en micmac ???
je viens de découvrir que cela correspondait au vieux canadien ;o)))
découle de cela l'expression :
http://dictionnaire.mediadico.com/traduction/lecture.asp/definition/MICMAC/parle

Quand les Français vinrent s'établir en Acadie, en 1603 et 1604 (lors de la
colonisation française en Amérique), les Micmacs devinrent des partenaires
commerciaux et des amis pour eux.


--
@+
;o)))

Publicité
Poster une réponse
Anonyme