Boucle tant que....

Boucle tant que.... - VB/VBA/VBS - Programmation

Marsh Posté le 14-06-2005 à 15:39:29    

Salut
 
je dois réaliser une macro qui me transfert toutes les lignes de quelques colonnes d'un document excel vers un document txt. J'ai déja réalisé ce qui suit. Là je bloque pour faire une boucle qui doit dire :  Tant que ligne (a partir de la ligne 3) non vide copier dans le fichier txt. Et je dois sélectionner les éléments de 5 colonnes dans l'ordre suivant : G E C A B
Voici ce que j'ai déja fait  :heink:  
 
 
Sub donnees()
 
     Dim DocWord As Word.Document
 
     Dim AppWord As Word.Application
 
     Set AppWord = New Word.Application
 
     Application.DisplayAlerts = True
 
     AppWord.ShowMe
 
     AppWord.Visible = True
 
     'Ouvre le document Word
 
     Set DocWord = AppWord.Documents.Open("K:\Developpement\Liste.txt", ReadOnly:=False)
 
 
Merci de bien vouloir m'aider a faire la suite :jap:  parce que là.... :pt1cable:  :(  :pfff:

Reply

Marsh Posté le 14-06-2005 à 15:39:29   

Reply

Marsh Posté le 14-06-2005 à 16:03:08    

as-tu essayé cette syntaxe:
 
' déclaration des variables
Dim ...
 
' ouvre le fichier et tu l'appelle #1
 
filename = Application.GetOpenFilename
Open filename For Output As #1
 
' tu rentre toutes tes valeurs de colonnes de la ligne NuméroLigne dans des variables
Do until ValeurA <> ""
ValeurG = Range(cells(NumeroLigne, 7).value
ValeurE = Range(cells(NumeroLigne, 5).value
ValeurC = Range(cells(NumeroLigne, 3).value
ValeurA = Range(cells(NumeroLigne, 1).value
ValeurB = Range(cells(NumeroLigne, 2).value
 
' ensuite tu écris dans le doc avec un write, avec une virgule à la fin pour séparer les colonnes
Write #1, ValeurG,
Write #1, ValeurE,
Write #1, ValeurC,
Write #1, ValeurA,
Write #1, ValeurB
 
Loop
 
Dis-moi si cela marche.


Message édité par holybout le 14-06-2005 à 16:09:24
Reply

Marsh Posté le 14-06-2005 à 16:13:16    

ValeurG = Range(cells(NumeroLigne, 7)    =>  erreur de syntaxe

Reply

Marsh Posté le 14-06-2005 à 16:16:06    

g réussi a corriger
 
par contre pour : Open filename For Output As #1  
"#1" c le nom du fichier texte???

Reply

Marsh Posté le 14-06-2005 à 16:18:44    

Open Filename For Output As "test.txt"  => incompatibilité de type 13

Reply

Marsh Posté le 14-06-2005 à 16:25:38    

Voila ce que j'ai mis :
 
 
 
 
' déclaration des variables
Dim ValeurG, ValeurE, ValeurC, ValeurA, ValeurB As Integer
 
 
' j'ouvre le fichier et je l'appelle #test
 
Filename = Application.GetOpenFilename
Open Filename For Output As ""test"
 
' tu rentre toutes tes valeurs de colonnes de la ligne NuméroLigne dans des variables
Do Until ValeurA <> ""
ValeurG = Range(Cells(NumeroLigne, 7)).Value
ValeurE = Range(Cells(NumeroLigne, 5)).Value
ValeurC = Range(Cells(NumeroLigne, 3)).Value
ValeurA = Range(Cells(NumeroLigne, 1)).Value
ValeurB = Range(Cells(NumeroLigne, 2)).Value
 
' ensuite tu écris dans le doc avec un write, avec une virgule à la fin pour séparer les colonnes
Write #test, ValeurG,
Write #test, ValeurE,
Write #test, ValeurC,
Write #test, ValeurA,
Write #test, ValeurB
Loop
End Sub

Reply

Marsh Posté le 14-06-2005 à 17:08:08    

ouais bon ok, j'ai programmé à la hache direct dans ie alors j'ai oublié des ptits trucs :D
 
ça marche sinon?

Reply

Marsh Posté le 14-06-2005 à 20:17:48    

sa fonctionne pas encore : erreur de type 13 pour : Open Filename For Output As ""test"

Reply

Marsh Posté le 14-06-2005 à 20:18:00    

:(:(:(:(

Reply

Marsh Posté le 14-06-2005 à 22:39:27    

Une petite recherche avec le mot "Output" sur ce forum donne cette réponse que j'ai envoyée il y a peu (dernier post).
 
http://forum.hardware.fr/hardwaref [...] 1971-1.htm
 
Il faudrait que tu apprennes un peu à utiliser l'aide de VBA.
Là où tu as écrit Filename, il faut mettre le nom (et le chemin) de ton fichier et, après le "As", il faut mettre un numéro.
 
De plus, évite de poster plusieurs fois pour un même problème. On finit par ne plus savoir où tu en es et ce qui marche ou pas.


Message édité par AlainTech le 14-06-2005 à 22:40:08

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 14-06-2005 à 22:39:27   

Reply

Marsh Posté le 15-06-2005 à 09:06:42    


' ouvre le fichier et tu l'appelle #1
 
?= Application.GetOpen("K:\Developpement\#1.txt" )
Open liste For Output As #1
 
 
qu'est ce que je dois mettre à la p place du point d'interrogation??  une variable que je dois déclarer?

Reply

Marsh Posté le 15-06-2005 à 09:50:39    

help please :)

Reply

Marsh Posté le 15-06-2005 à 10:01:03    

ValeurG = Range(cells(NumeroLigne, 7).value  
 
comment faire pour que le "numeroligne" soit détecter automatiquement sachant que le nombre des ligne du tableau varie selon les jours!

Reply

Marsh Posté le 15-06-2005 à 10:03:37    

Oh, la, la...
On n'est pas sorti de l'auberge!
Crois-tu vraiment être fait pour programmer?
 
Si le chemin de ton fichier est déterminé d'avance (et donc que l'utilisateur ne dois pas le choisir), fais ceci:

  Dim sOutFile As String
  Dim iFile as Integer
  sFile = "K:\Developpement\test.txt"  
  iFile = FreeFile  
  Open sFile For Output As #iFile  
 
  ...
 
  Write #iFile, ValeurG,  
  Write #iFile, ValeurE,  
  Write #iFile, ValeurC,  
  Write #iFile, ValeurA,  
  Write #iFile, ValeurB


Mais tout ça ne donnera pas ce que tu cherches à faire.
 
As-tu essayé ce que je disais dans ton autre topic?
Création du tableau dans word, nommage des colonnes et copie des colonnes d'Excel une à une...
 
Tu ne nous aides vraiment pas (et accessoirement tu n'es pas aidé) avec tes topics multiples.


Message édité par AlainTech le 15-06-2005 à 18:27:30
Reply

Marsh Posté le 15-06-2005 à 10:08:20    

Oui j'ai fait ce tu m'a dit dan l'autre topic. Ca ne me donnait toujours pas l'affichage que je souhaitais. ET.....mon maitre de stage a voulu que je modifie la forme du résultat final alor ça change l'algo! :(

Reply

Marsh Posté le 15-06-2005 à 10:20:09    

Si tu veux un bon conseil, apprends à donner des noms corrects à tes variables (préfixes s, i, b...).
Apprends aussi à lire l'aide, on y apprend plein de choses.
 
N'oublie pas de nous dire si marche et ce que tu as fait quand tu corriges une erreur (et pas seulement "g réussi a corriger" ).

Reply

Marsh Posté le 15-06-2005 à 10:51:53    

ok. Dorénavant je dirai mes corrections.
 
Pour le "valeurG = Range(Cells(numeroligne, 7)).Value" je voudrais que le processus(comme pour les autres valeurs) commence a partir de la ligne 3 du tableau et qu'il aille jusqu'à la fin qui est variable.
Y-a-t-il moyen de réaliser quelque chose d'ajustable?

Reply

Marsh Posté le 15-06-2005 à 11:36:00    

Quelqu'un pourrait m'aider?
Vous ne comprenez pas ce que je ve dire?????

Reply

Marsh Posté le 15-06-2005 à 11:40:08    

Tu veux trouver la dernière ligne non vide de la colonne G?
 
si oui, il existe un certain nombre d'astuce pour cela dont:
 
DerniereCellule = Cells(Cells.Rows.Count, "G" ).End(xlUp).Row
 
et ensuite dans ton For tu mets: for i = 3 to DerniereCellule
 
J'espère que ça aide.
 
edit: question toute bête: j'ai fait une recherche sur google et le premier résultat me donne un lien sur cathy astuce http://www.cathyastuce.com/word/ta [...] _excel.php ... cela te convient-il?


Message édité par holybout le 15-06-2005 à 11:43:31
Reply

Marsh Posté le 15-06-2005 à 11:43:44    

je veux trouver toutes les lignes non vide de la colonne G
alors je ne pense pas que ce tu m'a donnée correspond a ce que je souhaite.

Reply

Marsh Posté le 15-06-2005 à 11:44:40    

et en afficher le contenu dans le document txt

Reply

Marsh Posté le 15-06-2005 à 11:59:45    

svp de l'aide. Parce que ça me prend la têteeeeee!!!!!!!!  :fou:  :fou:  :fou:  :fou:  :fou:

Reply

Marsh Posté le 15-06-2005 à 12:00:03    

prenez pitié de moi!!!!!!!!

Reply

Marsh Posté le 15-06-2005 à 12:39:29    

ssssvvvvvpppp!!! :(:(

Reply

Marsh Posté le 15-06-2005 à 13:08:50    

est ce que quelqu'un voudrait bien m'aider????

Reply

Marsh Posté le 15-06-2005 à 13:40:03    

:??:  :??:  :??:  :??:  :??: alo? :??:  :??:  :??:  :??:  :sweat:

Reply

Marsh Posté le 15-06-2005 à 14:45:26    

j'en viens à bout de mon code!!!!
voici le résultat qui fonctionne :  
Sub donnees()
' déclaration des variables
Dim ValeurG, ValeurE, ValeurC, ValeurA, ValeurB, numeroligne, line As Integer
 
' ouvre le fichier et tu l'appelle #1
 
Dim sOutFile As String
  Dim iFile As Integer
  sFile = "K:\Developpement\test.txt"
  Open sFile For Output As #1
 
' tu rentre toutes tes valeurs de colonnes de la ligne NuméroLigne dans des variables
 
ValeurB = "coucou"
numeroligne = 3
 
 While ValeurB <> ""
     
    ValeurB = Cells(numeroligne, 2)
    ValeurG = Cells(numeroligne, 7)
    ValeurE = Cells(numeroligne, 5)
    ValeurC = Cells(numeroligne, 3)
    ValeurA = Cells(numeroligne, 1)
         
    Write #1, ValeurG,
    Write #1, ValeurE,
    Write #1, ValeurC,
    Write #1, ValeurA,
    Write #1, ValeurB
     
    numeroligne = numeroligne + 1
     
Wend
 
Close #1
 
End Sub

Reply

Marsh Posté le 15-06-2005 à 14:49:32    

comment peut-on aligner les écritures dans le document résultat?

Reply

Marsh Posté le 15-06-2005 à 18:34:40    

Pour la recup des données dans excel il y a plus simple
Je viens de batir Une BD et je dois extraire des donnees feuille par feuille sachant que celles ci évolues donc le Nbre de ligne change . Je mets dans une cel. libre la formule : NBVAL(G3:G50) ex en X1 cela donne le nb de cellules non vides, si à partir de G3 tu as 5 lignes X1=5  
 
Dans le code VBA il suffit de recupérer cette valeur
Nb_lig= worksheets("toto" ).range("X1" ).value
et de faire une boucle :
for j=3 to Nb_lig
extraire dans des variables la valeurs de tes cellules utiles  
item1= worksheets("toto" ).range("G" & j).value
item2= .........................("B" & j)
etc...
de concatener result= item1 & item2 .......
enfin ecrire cette variable dans ton .txt ( la je ne connais pas la syntaxe mais je crois qu'on t'as expliqué avant

Reply

Marsh Posté le 15-06-2005 à 23:51:43    

Voici quelque chose qui devrait te convenir:

Sub donnees()
     
  ' déclaration des largeurs de colonnes
  Const CLENA = 10
  Const CLENB = 10
  Const CLENC = 60
  Const CLENE = 10
  Const CLENG = 10
   
  ' déclaration des variables
  Dim sA As String
  Dim sB As String
  Dim sC As String
  Dim sE As String
  Dim sG As String
   
  Dim iFile As Integer
  Dim rRange As Range
  Dim sFile As String
  Dim vI As Variant
   
  ' Détermination du range sur lequel on va travailler
  Set rRange = Range([A3], [A3].End(xlDown))
   
  ' Récupération d'un numéro libre pour le fichier à écrire
  iFile = FreeFile
   
  ' Ouverture du fichier
  sFile = "K:\Developpement\test.txt"
  Open sFile For Output As #iFile
   
  ' On parcourt tout le range
  For Each vI In rRange
   
    sA = vI & Space(CLENA - Len(vI))
    sB = vI.Cells(1, 2) & Space(CLENB - Len(vI.Cells(1, 2)))
    sC = vI.Cells(1, 3) & Space(CLENC - Len(vI.Cells(1, 3)))
    sE = vI.Cells(1, 5) & Space(CLENE - Len(vI.Cells(1, 5)))
    sG = vI.Cells(1, 7) & Space(CLENG - Len(vI.Cells(1, 7)))
         
    Print #iFile, sG,
    Print #iFile, sE,
    Print #iFile, sC,
    Print #iFile, sA,
    Print #iFile, sB
       
  Next vI
  Close #iFile
End Sub


 
Ce n'est valable que s'il n'y a pas de "trou" dans la colonne A.
 
T'as intérêt à bien comprendre le fonctionnement pour pouvoir défendre ton travail. Sinon ton maître de stage risque de se rendre compte que ce n'est pas toi qui l'as fait...
 
Edit --> Tu peux, bien sûr, déterminer tes largeurs de colonnes dans les constantes.


Message édité par AlainTech le 15-06-2005 à 23:54:20
Reply

Marsh Posté le 07-07-2005 à 16:06:33    

AlainTech a écrit :

Voici quelque chose qui devrait te convenir:
Sub donnees()
     
  ' déclaration des largeurs de colonnes
  Const CLENA = 10
  Const CLENB = 10
  Const CLENC = 60
  Const CLENE = 10
  Const CLENG = 10
   
  ' déclaration des variables
  Dim sA As String
  Dim sB As String
  Dim sC As String
  Dim sE As String
  Dim sG As String
 
...
   
  ' On parcourt tout le range
  For Each vI In rRange
   
    sA = vI & Space(CLENA - Len(vI))
    sB = vI.Cells(1, 2) & Space(CLENB - Len(vI.Cells(1, 2)))
    sC = vI.Cells(1, 3) & Space(CLENC - Len(vI.Cells(1, 3)))
    sE = vI.Cells(1, 5) & Space(CLENE - Len(vI.Cells(1, 5)))
    sG = vI.Cells(1, 7) & Space(CLENG - Len(vI.Cells(1, 7)))
         
...


 
Je ne suis pas sûr que ça marche, car les caracteres n'ont pas forcément la même taille.
 
Je rencontre d'ailleurs le problème actuellement (J'ai aussi rajouté des espaces à la fin de mes chaînes pour qu'elles aient toutes la même longueur. Mais à l'affichage mes colonnes ne sont pas aligne :(
 
Quelqu'un aurait-il une solution ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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