a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008
-
22 mai 2008 à 20:59
a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008
-
27 mai 2008 à 18:26
Bonjour,
Avec mon programme VB6, j obtiens un tableau à deux dimensions. J aimerais pouvoir remplir une feuille Excel deja existante avec les valeurs de ce tableau 2D mais j aimerais la remplir une cellule sur 3 horizontalement seulement pour 1 cellule sur 2 verticalement (la ou se trouvent les "x" dans l illustration ci dessous)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 24 mai 2008 à 00:19
Ouf, la semaine a été dure... pas faché d'être en week-end...
OK, Tu écris ceci
Set ExcelAppli = CreateObject("Excel.Application")
Set NewXlFile = ExcelAppli.Workbooks.Add '<<<
Donc tu crées un nouveau classeur qui ne porte pas encore de nom. Si j'ai bien compris, ce n'est pas ce que tu veux. Tu veux plutôt écrire dans un classeur existant.
Donc, plutôt que d'utiliser un Add qui te crées un nouveau classeur, il te faudrait utiliser Open pour ouvrir ce classeur existant.
Set ExcelAppli = CreateObject("Excel.Application")
Set NewXlFile = ExcelAppli.Workbooks.Open("C:\Documents and Settings\Book3.xls")
Donc, en utilisant NewXlFile comme tu le faisais, tu écriras dans le fichier existant que tu viens d'ouvrir.
Par contre, j'ai un doute sur la double-boucle et le résultat que tu obtiendras si tu ne mets pas de IF ou de Exit For, mais bon... on verra... une chose à la fois.
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008 22 mai 2008 à 22:07
Effectivement, premierement TonTab a 64 colonnes et un nombre fixe mais non determine de lignes disons n.
Je dirais
range(A2) = TonTab(0,0)
range(D2) = TonTab(0, 1)
range(G2) = TonTab(0, 2)
...
range(BL2)=TonTab(0,63) (derniere valeur de la premiere ligne du tableau)
a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008 22 mai 2008 à 22:27
Il me faudrait faire une boucle du genre:
For i = 0 To n - 1
For j = 0 To 63
Range([lettre j]2*i) = TonTab(i, j) ' [lettre j] represente la j ème colonne representée par une lettre sous Excel
Next j
Next i
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 22 mai 2008 à 23:49
Je pense que c'est un peu comme tu l'écris. C'est-à-dire avec 2 boucles imbriquées.
Par contre, ça te prendrait 2 compteurs (ligne et colonne) que tu incrémentes de 1 à chaque boucle. Un compteur dans la boucle i et l'autre dans la boucle j. Ensuite tu dois vérifier l'état de ces compteurs avant d'inscrire la donnée.
Je pense que l'emploi de MOD serait utile pour cette vérification...
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008 23 mai 2008 à 21:48
Mais au final je ne sais toujours pas comment ecrire en VB "Range([lettre j]2*i)" car il est simple d ecrire A1,...A5 en ecrivant (Ai), for i=1 to 5 mais comment fait ton pour ecrire de facon simple A1, B1, C1, D1, E1 ? Sans ca je ne peut pas ecrire ma boucle...
Please HELP !
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 23 mai 2008 à 23:24
Il faudrait peut-être récapituler avec ton code... En fait, je ne te suis plus. Je ne vois pas où tu crées un nouveau fichier (?) et je ne vois pas non plus où tu mets ta condition (avec Mod) pour vérifier quand écrire tes données...
Dans ton premier message, tu as une plage avec des 1 partout et quelques X
Le résultat contient un 5
Déjà, je ne vois pas la logique... mais avec un peu plus d'explications ou un exemple plus probant, on va bien finir par y arriver.
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008 23 mai 2008 à 23:59
L exemple que j avais donne au debut etait pour illustrer mon probleme de facon simplifier car en realite c est plus complexe comme ca mais comme tu dis on va y arriver LOOOL.
Donc je recapitule:
J ai un fichier Excel deja existant dont le nom complet est : C:\Documents and Settings\Book3.xls
Il contient deja des valeurs. Je souhaiterais prendre toutes valeurs contenues dans un tableau 2D appele Table et ecriredans certaines cellules de la feuille Excel d une facon bien precise qui est "remplir 1 cellule sur 3 en horizontal et 1 cellule sur 2 en vertical" afin de completer la feuille Excel ( les cellules avec des croix rouges dans le tableau suivant)
1, 1, 1, 1, 1, 1, 1, ----
x, 1, 1, x, 1, 1, x, ----
1, 1, 1, 1, 1, 1, 1, ----
x, 1, 1, x, 1, 1, x, ----
1, 1, 1, 1, 1, 1, 1
Desormais je sais comment creer un nouveau fichier Excel et le remplir de la facon dont je souhaite en faisant ce qui suit :
Dim ExcelAppli As Object
Dim NewXlFile As Object
Set ExcelAppli = CreateObject("Excel.Application")
Set NewXlFile = ExcelAppli.Workbooks.Add
For i = 0 To NombreDeLignes
For j = 0 To 63
NewXlFile.Sheets("Sheet1").Cells(2 * i + 1, 3 * j + 1).Value = Table(i, j)
Next j
Next i
NewXlFile.Close False
ExcelAppli.Quit
Set NewXlFile = Nothing
Set ExcelAppli = Nothing
Mais mon probleme est maintenant de faire ce "remplissage" dans mon fichier deja existant C:\Documents and Settings\Book3.xls
Voila l unique probleme restant...
Concernant le modulo, je ne l ai pas utilise car ca fonctionne sans l utiliser.
a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008 24 mai 2008 à 00:40
Je vais devenir fou !!!!!!!!!
Ta methode est parfaite et logique ! Mais ca ne marche pas, je ne comprend pas ! En fait ca ne remplit pas le fichier et en plus quand j ouvre le fichier ca me demande si je veux desactiver les macros et ensuite ca me dit que le fichier "book3.xls is locked for editing, Open read Only or click notify" ...
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 24 mai 2008 à 00:45
Assure-toi que le fichier est bien fermé quand tu essaies de l'ouvrir par code. De plus, il te faut fermer la session Excel quand tu termines ton programme (varAppli.Quit, =Nothing,...).
Bien sûr, quand un bogue survient et que tu arrêtes ton programme, la session préalablement ouverte demeure ouverte dans les processus de Windows. Tu pourrais faire Ctrl-Alt-Del et aller voir les processus. Il y a fort à parier qu'il y a d'anciennes sessions encore ouvertes. Efface-les toutes.
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
a506920
Messages postés21Date d'inscriptionvendredi 4 avril 2008StatutMembreDernière intervention28 mai 2008 24 mai 2008 à 00:56
Effectivement j avais d' anciens processus actifs mais le fichier ne se remplit toujours pas, j ai toujours le message sur la desactivation des macros mais celui concernant la lecture seule ne se presente plus.
J ai deja mis des codes pour terminer le programme tels que :
NewXlFile.Close False
ExcelAppli.Quit
Set NewXlFile = Nothing
Set ExcelAppli = Nothing