Remplir une cellule avec beaucoup de caractères

amalcon Messages postés 12 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 8 février 2007 - 26 juil. 2006 à 17:59
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 5 août 2006 à 15:16
Bonjour,
Je n'ai pas trop l'habitude de poser des questions sur les forums (en général, je trouve la réponse avant), mais la, je coince vraiment, VB n'étant pas mon language de prédilection.
Voila mon problème : je travaille sous Accèss et j'ai besoin d'exporter une table sous Excel. Comme je ne veux pas exporter toutes les données, j'ai retranscrit un export 'partiel' sous VB. Mon problème est que certains champs de mes tables contiennent beaucoup de caractères (la cellule qui plante 900). Tout ce passe bien, sauf pour ces cellules où manifestement le nombre de caractères à écrire est trop important. Comment faire pour écrire dans une cellule excel un texte vraiment important ?
La solution doit exister, puisque si je demande un export total via acces, la cellule est remplie, sans qu'il manque d'information.
Je n'ai pas trouvé de réponses sur le forum, dsl si elle existe de multiplier les posts (jespère avoir posté au bon endroit).

Merci à ceux qui pourront m'aider.

8 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 juil. 2006 à 18:11
Salut,

alors pour ta première question dans le Forum, c'est parfait (faut le dire aussi, et pas que raler quand ça ne vas pas !!)

Sinon pour ton problème, le résultat de ta requete :

La propriété Rowsource d'un contrôle est limitée à 1024 caractères.
Un objet requête peut contenir une chaîne SQL d'environ 64 000 caractères.
Un contrôle texte peut contenir 65 535 caractères au maximum.
Nous ne pouvons donc pas générer des chaînes SQL de plus 1024 caractères.

Et un String peut contenir plus de 2 milliards (ou millions) de caractères.

Je ne te suis pas d'une grande utilité mais si ça peut t'aiguiller..

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce sondage
Merci de prendre le temps de lire le Règlement CS    http://www.smileycentral.com/?partner=ZSzeb008_ZNxdm414YYFR
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
27 juil. 2006 à 00:17
Salut,


Quand tu dis (la cellule qui plante 900). 900 est le nombre de caractères ?
Comme le dis Mortalino une cellule peut contenir 32767 caractères, mais seulement 1024 sont visible dans la cellule les autres s'affiche dans la barre de formule.
Donc vérifie ce point.
sinon envoie un bout de ton code d'export que l'on puisse y jeter un coup d'oeil.

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
amalcon Messages postés 12 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 8 février 2007
27 juil. 2006 à 09:02
Oups, j'ai oublié de préciser que pour une cellule où j'essaie d'écrire environ 900 caractères, VB me renvoie un message d'erreur qui dit :
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






Erreur d'éxécution '7' : Mémoire insuffisante.






J'utilise le code suivant :






xlSheet.Cells(linge + 1, i + 1) = MyRecord(i).Value





Avec MyRecord un RecordSet dans lequel se trouve les résultats de ma requête SQL.

Mortalino : Quand tu dis qu’une requête SQL ne peut contenir plus de 1024 caractères, ça veut dire que si mes champs dépassent cette taille, je vais perdre de l’information ? Ca c’est embêtant, et je le savais pas. Il faut que j’en tienne compte.





Valastre : Une cellule peut contenir 32767 caractères, ok. J’avais remarqué que tout le contenu ne s’affichait que dans la barre de formule. J’avais oublié de mentionné l’erreur ce qui va peut être t’aiguiller sur ce qui plante.





En tous cas, merci.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
27 juil. 2006 à 09:45
Petite question toute bête (tu y as sans doute pensé, mais bon, parfois, les trucs les plus évidents ne nous sautent pas aux yeux ^^)
Tu dis :
"je travaille sous Accèss et j'ai besoin d'exporter une table sous Excel. Comme je ne veux pas exporter toutes les données, j'ai retranscrit un export 'partiel' sous VB."

Quand tu dis que tu ne veux pas exporter toutes les données, tu veux dire qu'il n'y a que certains champs de ta table que tu veux exporter ? Ou aussi dans les enregistrements ?
Si j'ai bien compris ton petit bout de code : tu passes sur chaque champ de chaque enregistrement et tu recopies cellule par cellule.

Pourquoi ne pas tout simplement créer une requête dans Access, avec l'interface graphique ? Après, tu n'as plus qu'à exporter en une seule opération ta requête vie l'export d'Access ou l'import d'Excel. Ca me semble plus simple/pratique mais je ne connais sans doute pas tes contraintes.

Une autre piste que tu pourrais étudier : tu demandes l'export total de ta table sous Excel et ça ne pose pas de pbs (au passage, je suppose donc que si tu crées bien ta requête, ça devrait fonctionner correctement), tu pourrais traiter dans l'autre sens.
Tu traites ta base ACCESS à partir d'EXCEL, tu importes ta table et via un filtre automatique (qui n'est en fait qu'un ersatz de requêtage d'une base de données), que tu peux tout à fait configurer dans un bouton (c'est un petit code sympa à faire ^^), via un filtre automatique je disais donc, tu ne récupères dans Excel que les données qui t'intéressent.

Molenn
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amalcon Messages postés 12 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 8 février 2007
27 juil. 2006 à 13:58
Le petit plantage de notre serveur internet m’a permis de tester la solution proposée avant de répondre : exporter tout, puis trier. J’ai donc exporter tous mes fichiers et supprimé les lignes des fichiers excel qui ne correspondaient pas aux critères. C’est très brutal, mais ca a le mérite de marcher (et comme je vois le client cet aprèm ).<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>








 








Sinon, je suis toujours intéressée pour savoir comment faire, pour culture personnelle et parce que ca peut toujours servir.








 








Pour info, voila un peu le détail de ce que je dois faire :







C’est l’utilisateur qui choisit l’export qu’il souhaite faire (liste de choix dans un formulaire).







On a une table principale, certains champs sont à choisir dans une liste prédéfinie. L’utilisateur peut choisir d’exporter les enregistrements dont le champ a une valeur précise.







En fait, il y a 3 champs qui peuvent être définis, exemple transposé car je ne suis pas sure d’être claire : le pays, le département et la ville. L’utilisateur peut ne choisir qu’un pays, ou affiner son export en choisissant aussi un département et une ville.







De plus, pour cette table principale, il existe une table ‘fille’ contenant des données qui peuvent être confidentielles. Lors de l’export, l’utilisateur peut choisir ou non d’exporter ces données (sachant que la table ‘mère’ est elle forcément exportée). Il existe donc des enregistrements qui seront exportés ou non, mais aussi des champs qui le seront ou non (on peut dire que la donnée existe, qu’elle est confidentielle, mais on n’exporte pas sa valeur).








 








Pour l’application, il s’agit d’exporter les tables sous forme de fichiers excel afin de pouvoir échanger des données avec d’autres sociétés possédant aussi cette base (elles ont la même structure, mais le remplissage est propre à chaque société (la base est livrée vide)). Ces fichiers passent dans une moulinette c++ qui permet de faire le tri entre les données reçues et les données existantes. Un import permet ensuite de mettre à jour sa propre base.







Le projet est assez complexe, j’ai récupéré la base Access qui avait déjà été commencée par un ex collègue et comme je ne maîtrise pas du tout Access…







Créer une requête dans Access est possible pour ce genre d’export tordu ? Si oui, je sais pas trop comment faire (il n’en existe pas dans la base et comme j’ai appris ce que je sais d’Access avec les trucs qui existaient déjà, j’ai pas trop d’exemples sous la mais, vive les autoformations)
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
27 juil. 2006 à 15:22
Alors, je peux te proposer une méthode, la mienne : pas très facile à appréhender je veux bien l'admettre, et je ne sais pas si elle est facilement adaptable à ton cas (mettons que si tu as une 100aine de champs, ça risque d'être très compliqué :p). Je vais te donner les principes, en partant de l'exemple que tu as choisi :


Tu possèdes deux tables Access :
Mère : Num, Nom, Pays, Ville (Num en clé primaire)
Fille : Num, Nom, Prénom, Age (Num en clé primaire)
Tu nous as dit qu'elles étaient liées, si c'est bien fait, tu as une intégrité référentielle. Pour l'exemple, je vais partir sur l'idée que ta table Fille (qui peut contenir des données personnelles) est la table des Personnes, la liaison se fera donc sur le Nom (le Fille.Num alimente le champ Mère.Nom)

A partir de ces 2 tables et de cette liaison, je vais créer une Requête qui va me remonter l'intégralité des champs, nommée MèreFille :
MèreFille : Num, Fille.Nom, Prénom, Age, Pays, Ville

La base ACCESS est en place, il ne te reste plus qu'à gérer l'Export d'ACCESS dans Excel de la requête, ou l'import de la requête à partir d'Excel (à toi de voir ce qui est le plus pratique pour ton appli : dans les 2 cas, il faudra utiliser en VBA la méthode TransferSpreadsheet, attention, il ya de toutes petites nuances entre le VBA Excel et ACCESS, ou alors, en créant une macro d'export avec l'assistant d'ACCESS)


Une fois l'import/l'export effectué, tu as donc dans ton fichier Excel une feuille portant le nom de la requête, donc, MèreFille.
Les 6 premières colonnes sont remplies par la base de données, puisque dans mon exemple, la requête MèreFille comprend 6 champs. La ligne 1 contient les noms de colonne, soit A1 :Num, B1: Fille.Nom, C1: Prénom, D1: Age, E1: Pays, F1: Ville


C'est maintenant que tout se complique. Pour trier les données, on va utiliser un filter automatique. Je te conseille avant de te lancer plus loin de faire des tests pour comprendre comment ça fonctionne.
Une image que j'ai pour expliquer le fonctionnement, c'est l'assistant Création de requête ACCESS. Parce qu'en fait, tu vas recrées cet assistant dans Excel.

Donc, de A1 à F100 (je suppose qu'il y a 100 lignes dans la requête), nous avons notre table/base de données.

Dans les colonnes H et I, nous allons écrire nos critères : Mettons que l'on veuille pouvoir trier sur la Ville et le Pays
En H1, je vais écrire Pays et en I1: Ville (Attention, les noms doivent être EXACTEMENT identique au nom de colonne, le plus simple, c'est de faire un Copier/Coller)
Ensuite, représente toi l'assistant requête d'ACCESS, quand tu mets des contraintes, tu joues sur la position des lignes, ici, c'est pareil : 2 contraintes sur la même ligne = ET, une ligne sous l'autre, OU.
Ex : On veut la liste des personnes dont le pays est la France ET la ville PARIS.
On aura donc :
H1: Pays I1: Ville
H2: France I2: Paris
Pour trier ceux dont le pays est la France OU la ville est Paris (dans mon exemple, c'est obligatoire, mais bon .. Il y a un bled Paris aux USA je crois donc :p)
H1: Pays I1: Ville
H2: France
I3: Paris

Etc ... Plus on rajoute de critères, plus il faut faire attention aux ET et OU.


Il reste une dernière chose à faire : Que veut on extraire ? Mettons que ce soit le Nom et l'âge.

On va donc mettre côte à côte les données qui nous intéresse :
En K1: Fille.Nom
en L1: Age

Notre filtre est prêt.
Plus qu'à faire tourner : Menu Données\Filtre\Filtre Automatique
Je prends systématiquement Copier vers un autre emplacement, c'est plus propre je trouve ^^
Plages : A1:F100 (notre base de données donc)
Zone de critères : H1:I2 (notre critère pour avoir la ville ET le pays)
Copier dans : K1:L1 (là, c'est la faute à la traduction française, c'est pas très clair. En fait, cette zone sert à désigner la liste des champs que l'on veut récupérer)
Et quand on presse OK, nos colonnes K et L se mettent à jour à partir de la ligne 2, avec les données répondant aux critères sélectionnés.

Ouf ... Voici le fonctionnement du filtre élaboré.

Tu vois sans doute où je veux en venir à présent pour ton pb :
Si tu arrives à faire mettre à ton utilisateur ses critères comme il faut, positionner les champs qui l'intéressent, tu peux lui créer une interface toute simple.
Par expérience, ça ne sera pas possible. mes collègues, même avec une formation, n'y arrivent toujours pas et j'ai abandonné l'idée de leur faire faire ce genre de filtre eux-même (pas que ce soit très dur mais .. comme je l'ai dit, faut le visualiser et bon, c'est pas la tasse de thé de tout le monde non plus).

Donc, on arrive à ce qui va être probablement ton cas : crée une interface où ton utilisateur va choisir dans x listes les champs, critères, etc ... et quand il appuyera sur un beau bouton, ça fera tourner tout ça.
Et tu vas te heurter à un 1er pb, toutes les composantes du filtre élaboré doivent être dans la même feuille.

La seule solution que j'ai trouvé, c'est alimenter par ex dans une page de paramètres, un tableau qui contient l'emplacement des zones de critères, de la base de données et les champs qu'on veut récupérer.
Si je reviens à mon exemple, je crée une feuille Paramètre.
A1: BDD B1: A1:F100
A2: Crit B2: H1:I2
A3: Quoi B3: K1/L1
Ce tableau représente donc les données nécessaires à mon filtre.
L'inconvénient, c'est que ça demande un peu de code. Je recalcule et remets à jour mon tableau suite à l'export de la requête ACCESS (on exporte une requête, donc, je cherche la première ligne vide dans la feuille MèreFille du champ clé primaire (comme en clé, j'ai toujours un numéro auto, je suis sûr que ma première ligne vide est la fin de ma base de données). Etc ...
Pour les critères, ça obligera quand même l'utilisateur à une certaine rigueur pour ces critères, ou alors, tu gères la mise en place toi même en code : tu fais saisir les critères voulus sur une feuille interface et tu vas positionner via un code les critères où il faut. C'est faisable, je l'ai déjà fait :p Mais pas simple.

Voilà, il ne te reste plus qu'à faire tourner le filtre automatique en allant chercher les données insérées dans ta feuille de Paramètres.
Je te mets ici le bout de code que j'utilise pour ça :

'Filtre Récupération des données du Filtre élaboré
Dim BaseDonnées, Critère, Copie As String

BaseDonnées = Worksheets("Paramètres").Range("B1").Value
Crit= Worksheets("Paramètres").Range("2").Value
Copie = Worksheets("Paramètres").Range("B3").Value

'Lancement du filtre élaboré
Worksheets("MèreFille").Activate
Worksheets("MèreFille").Range(BaseDonnées).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Worksheets("Paramètres").Range(Crit), CopyToRange:=Worksheets("MèreFille").Range(Copie), Unique _
:=False



Voilà, bien sûr, ce n'est qu'un exemple avec une base de données simples, tu as toutes les bases, mais il te reste le truc bien lourd, crée l'interface et générer toi-même la mise en place des critères, le recalcul de l'emplacement de la base de données.
Mais qui a dit qu'Excel était un truc simple ? :p


En tous cas, une fois qu'on en a bien bavé dessus, et que tu as corrigé tous tes bugs, ça impressionne les collègues de voir ce qu'on arrive à faire avec un tableur :p

Molenn
0
amalcon Messages postés 12 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 8 février 2007
27 juil. 2006 à 17:36
Oula, après une première lecture, c'est sur, ca a pas l'air facile. Mais ca m'a l'air plus 'propre' que le truc un peu pourri que j'ai fait (et qui faudra que j'arrange quand même). J'ai pas vraiment le temps d'essayer de faire ta méthode (il me reste 2 semaines de boulot sur ce projet, pour encore pleins de trucs à faire) et c'est bien dommage, parce que ca m'a l'air vraiment bien. En tout cas, je garde ca sous la main et j'essaierai chez moi pour voir, je pense que je vais bien m'amuser .

En tout cas, merci beaucoup pour ta réponse très intéressante (c'est l'inconvénient du forfait, il faut faire vite, pas forcément bien). Je pense que ca pourra me servir quand j'aurai essayé sur un cas précis.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
5 août 2006 à 15:16
Juste un truc, je viens de relire ma prose (ouah quand même, j'avais du fumer quelque chose ^^)

Pendant un moment, je me suis embrouillé les pinceaux. A chaque fois que je parle de filtre automatique, il faut comprendre, Filtre élaboré.

Si tu cherches dans les filtres auto, tu n'es pas prêt de trouver ^^

Molenn
0
Rejoignez-nous