Boucle tant que.... - VB/VBA/VBS - Programmation
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.
Marsh Posté le 14-06-2005 à 16:13:16
ValeurG = Range(cells(NumeroLigne, 7) => erreur de syntaxe
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???
Marsh Posté le 14-06-2005 à 16:18:44
Open Filename For Output As "test.txt" => incompatibilité de type 13
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
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
ça marche sinon?
Marsh Posté le 14-06-2005 à 20:17:48
sa fonctionne pas encore : erreur de type 13 pour : Open Filename For Output As ""test"
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.
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?
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!
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 |
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.
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!
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" ).
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?
Marsh Posté le 15-06-2005 à 11:36:00
Quelqu'un pourrait m'aider?
Vous ne comprenez pas ce que je ve dire?????
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?
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.
Marsh Posté le 15-06-2005 à 11:59:45
svp de l'aide. Parce que ça me prend la têteeeeee!!!!!!!!
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
Marsh Posté le 15-06-2005 à 14:49:32
comment peut-on aligner les écritures dans le document résultat?
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
Marsh Posté le 15-06-2005 à 23:51:43
Voici quelque chose qui devrait te convenir:
Sub donnees() |
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.
Marsh Posté le 07-07-2005 à 16:06:33
AlainTech a écrit : Voici quelque chose qui devrait te convenir: |
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 ?
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
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 parce que là....