Cellule qui sature sous Excel & VB

Cellule qui sature sous Excel & VB - VB/VBA/VBS - Programmation

Marsh Posté le 07-03-2006 à 05:29:29    

J'ai un soucis avec une cellule excel qui semble dépassée par la quantité de caractères que je veux y mettre.
 
Du coup je pense utiliser une zone de texte, mais je ne sais pas quelle syntaxe utiliser en VBA pour coller le contenu d'une chaine de caractères dans ma zone.
 
Quelqu'un connait cette syntaxe ou aurait une idée pour éviter que ma cellule ne sature ?

Reply

Marsh Posté le 07-03-2006 à 05:29:29   

Reply

Marsh Posté le 07-03-2006 à 09:49:35    

L'information pertinente qui manque est la longueur de la chaine que tu veux coller dans la cellule.
Si tu nous expliquais aussi quelle méthode tu utilises pour remplir la cellule (code VBA, VB6 + OLE Automation ?) ça pourrait aider.

Reply

Marsh Posté le 08-03-2006 à 00:22:39    

J'utilise du VBA de base, c'est une macro sous excel.
La taille de ma chaine de caractère varie pas mal, disons 1500 caractères au pire.
 
La méthode justement je l'ai pas, j'ai ma zone de texte et je voudrais la methode pour mettre le contenu de ma variable dedans.

Reply

Marsh Posté le 08-03-2006 à 09:34:50    

Là je ne comprends pas, puisqu'une cellule Excel accepte sans problème une chaine de caractère de longueur 1500.
Dans le doute j'ai fait un essai tout bête et ça fonctionne (note le 15 000 et pas seulement 1 500).

Dim f As Worksheet
Set f = Application.ActiveSheet
f.Cells(1, 1) = String(15000, "e" )


Va falloir creuser plus profond

Reply

Marsh Posté le 08-03-2006 à 22:40:30    

Hmmm je connais pas du tout cette façon de faire donc j'ai tenté.
 
Ca me file un message d'erreur "erreur d'éxécution 1004. Erreur définie par l'application ou par l'objet".
 
La ligne correspondante est :
 
"f.Cells(2, 294) = String(15000, str_listing)"
 
J'ai juste changé la position de la cellule et mis la variable contenant ma chaine de caractères a la place de la tienne. j'ai fait une bourde ?
Désolé je suis pas doué en VBA... :-\
Merci de ton aide.

Reply

Marsh Posté le 08-03-2006 à 23:24:52    

dans le code de tegu, on insère une chaîne qui comporte 15 000 lettres 'e'. Toi, tu essayes d'insérer une chaîne qui comporte 15 000 fois ta chaîne str_listing (qui doit déjà comporter pas mal de caractères...).
Mais je ne pense pas que ton problème vienne de là : on ne peut pas dépasser le nombre de 256 colonnes (en-tête de colonne "IV" ). Donc tu vas déjà trop loin avec 294...


Message édité par juju2k le 08-03-2006 à 23:29:56
Reply

Marsh Posté le 09-03-2006 à 02:47:13    

OK, j'avais inversé colonnes et lignes... (on va y arriver). Mon code est donc :
 
Set f = Application.ActiveSheet
f.Cells(295, 3) = String(1, str_clauses)
 
Sauf qu'il ne m'affiche qu'un "A" dans la cellule maintenant ("A" qui est bien la première lettre de ma chaine de caractère)...

Reply

Marsh Posté le 09-03-2006 à 02:49:06    

Notes que si je met
 
String(2, str_clauses) à la place du 1 il me met "AA".
 
On tient une piste :-)

Reply

Marsh Posté le 09-03-2006 à 10:48:35    

Ça peut vouloir dire que ta chaine contient un caractère spécial interprété par Excel et qui te fout le boxon.
Ça peut aussi vouloir dire que str_clauses ne contient que "A".

Reply

Marsh Posté le 09-03-2006 à 20:08:38    

En jetant un oeil dans l'aide de VBA, on se rend compte que la fonction String(number, character) ne prend en compte qu'un seul caractère. Dans le cas où on pointe sur une chaîne, seul le premier caractère de la chaîne est répété "number" fois.
 
edit : l'aide de VBA est assez complète (pareil pour Excel d'ailleurs). Faut pas hésiter à jeter une oeil à celle-ci une fois qu'on se fait orienter (sur le forum par exemple :) ) vers la fonction qui nous intéresse  ;)


Message édité par juju2k le 09-03-2006 à 20:11:30
Reply

Marsh Posté le 09-03-2006 à 20:08:38   

Reply

Marsh Posté le 10-03-2006 à 01:29:02    

Oui oui mais l'aide ne donne pas grand chose sur Application ou Cells... C'est trop général. Et les tutoriaux que j'ai trouvé sur ebay ne donnent rien.
 
Si on partait avec l'option qu'on a vu au début : faire une zone de texte et mettre la variable dedans, du coup on a plus à se préoccuper de ce que la cellule accèpte... Mais je ne connais pas la syntaxe definissant une zone de texte, ni ses méthodes.
 
Désolé, j'y connais vraiment rien en vba... Merci de votre aide en tous cas.

Reply

Marsh Posté le 14-03-2006 à 00:55:30    

Bon ben j'ai rééssayé deux ou trois trucs et rien...
 
Est-ce que quelqu'un sait quelle méthode employer pour coller le contenu d'une variable type string dans une Zone De Texte en VBA ?

Reply

Marsh Posté le 14-03-2006 à 18:31:18    

Ne connaissant pas la méthode, j'ai utilisé l'enregistreur de macro. J'ai pu en faire ça :
 

Dim Chaine As String
 
    Chaine = "salut comment ça va ssssssssssssss?"
    ActiveSheet.Shapes("Text Box 1" ).Select
    Selection.Characters.Text = Chaine


Tu peux remplacer "Text Box 1" par le nombre 1, qui correspond à la première forme créée sur ta feuille.

Reply

Marsh Posté le 22-03-2006 à 01:52:20    

Aah aaaah ? Eh ben non...
J'ai mis exactement :
 
 
Dim str_texte As String
[...]
ActiveSheet.Shapes("zone_texte_1" ).Select
Selection.Characters.Text = str_texte
 
(avec str_texte ma variable contenant le texte et zone_texte_1 ma zone de texte).
 
La zone de texte reste désespérement vide...

Reply

Marsh Posté le 22-03-2006 à 02:05:10    

Ah par contre en essayant avec une plus petite chaine de caractère que la mienne, j'arrive bien à mettre le contenu dans la zone de texte... Donc la methode est bonne mais ma chaine a toujours l'air trop grande... je commence à ne plus rien comprendre.

Reply

Marsh Posté le 22-03-2006 à 03:07:57    

Bon alors après quelques investigations...
 
La methode donnée par Juju2K fonctionne bien pour afficher du texte, mais ma variable est formée par la concaténation de contenus de diverses cellules, elle-même étant le résultat de concaténations d'autres cellules...
 
J'ai repris pas à pas et j'arrive à afficher le début de mon texte en ajoutant contenu de cellule par contenu de cellule... Et au bout d'un moment il n'affiche plus rien. Quand j'ajoute le contenu de la 7ème cellule rien ne s'affiche dans la zone de texte. Ou plutot elle apparait vide.
 
Quand j'essaye d'afficher le contenu seul de cette 7ème cellule, ça marche.
 
Donc résumons :
 
Affichage de la concaténation du contenu des 6 premières cellules ça marche.
Affichage du contenu de la 7ème cellule ça marche.
Affichage de la concaténation du contenu des 7 cellules ça marche pas.
 
Une idée ?

Reply

Marsh Posté le 22-03-2006 à 21:03:01    

Si tu diminues le contenu des six premières cellules, est-ce que t'arrives à insérer celui de la septième cellule ?
(C'est pour voir si c'est une question de caractères max dans une zone de texte...)

Reply

Marsh Posté le 23-03-2006 à 04:47:47    

Après quelques tests il semble que ce soit a cause des concatenations successives que la zone de texte refuse de se remplir, ou à cause de la longueur du texte (mais ça me parait plus étrange donc je pense plutot à la première raison)
 
J'ai essayé de passer le contenu de mes cellules en dur :
 
        str_1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
                       Range("Variables!E1111" ) & _
                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
                       Range("Variables!H1100" ) & _
                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
                       Range("Adresse" ) & _
                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
 
Ca marche comme ça, mais si je rajoute un "a" ça ne marche plus.
 

Reply

Marsh Posté le 23-03-2006 à 18:51:07    

Tu veux dire, si tu rajoutes un "a" de cette manière :

...aaaaaa" & "a"


n'est-ce pas ? (par opposition au rajout d'un "a" comme ça dans la chaîne "aaaaa...aa" )
 
Si c'est une question de quantité de concaténations successives, tu remplies ta variable en plusieurs fois et tu seras fixé...


Message édité par juju2k le 23-03-2006 à 18:51:40
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed