Rox74
Messages postés30Date d'inscriptionmercredi 9 avril 2008StatutMembreDernière intervention10 février 2011
-
9 avril 2008 à 17:06
Rox74
Messages postés30Date d'inscriptionmercredi 9 avril 2008StatutMembreDernière intervention10 février 2011
-
10 avril 2008 à 22:20
Bonsoir à tous,
Je suis " TRES" débutant en VBA et j'aurais besoin d'aide. Ce que je recherche avant tout c'est une aide bien commentée, pour que dans le futur je puisse me débrouiller de plus en plus tout seul.
Donc voila mon problème d'aujourd'hui :
Je voudrai que mon programme lance pour une seule fois, grâce à bouton, une liste de mot contenue dans un fichier texte.
Sachant que ma liste de mot dépasse le nombre de ligne autorisées d'une colonne, je voudrai que lorsque la colonne "A" est replie la liste continue dans la colonne "B" et ainsi de suite. De plus mes colonnes ne doivent pas commencer à la ligne "1 " mais "10".
Ce que j'ai fais:
j'ai trouvé ma liste de mot en " *.txt", les mots sont écris les uns en dessous des autres.
j'ai ouvert Excel et créé un bouton.
Et je suis bloqué,
Si une âme charitable passe sur mon message et quelle veut bien perdre un peu de son temps pour m’aider se serait super.
Rox74
Messages postés30Date d'inscriptionmercredi 9 avril 2008StatutMembreDernière intervention10 février 2011 10 avril 2008 à 22:20
Bonsoir a tous
Merci de l'attention que vous avez porté à ma question.
Faucheuse: je sais pas si ton code fonctionne, j'ai essayé mais un message d'erreur synthaxe apparaissait ( avec le Loop).
Donc j'ai continué d'écrire des truc avec offset ( ;-) faucheuse) et j'ai fini par trouvé.
Voila le code
Private Sub CommandButton1_Click()
Range("A10", "D65536").ClearContents 'Efface le contenue des cellules entre la "A10" et la "G10".
Dim MC As Range ' Cellule Courante pour stockage dans la feuille principale.
Set MC = Range("A10") ' Attribue la cellule "A10" à ma cellule courante.
Open "chemin du fichier " For Input As #1
i = 0 'Départ en ligne 0 car inscription cellule "A10"
j = 0 'Départ en colonne 0 car inscription cellule "A10"
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, temp ' Lit la ligne dans la variable.
If i 65527 Then j j + 1 ' Si i à la valeur 65527 (derniere ligne de la colonne) alors décalage d'une colonne. If i 65527 Then i 0 ' Si i à la valeur 65527 alors i reprend du début ( la ligne 10)
MC.Offset(i, j).Value = temp ' Ecriture de la ligne du fichier texte dans la cellule décalée de i et de j par rapport à la cellule MC (ici "A10")
i = i + 1 'l'ancienne valeur de i se voit augmentée de 1 pour le passage de boucle suivant
Loop 'renvoit à la ligne "Do.." , permet de faire une boucle
Close #1 'permet de fermer le fichier texte
End Sub
Voila j'espère que ce code pourra etre utile à d'autres personnes
Je pense que je peux mettre réponse acceptée.
bonne soiré aplussstardesss
RoX
ps: si des personnes ont des commentaires a faire sur le code, je prends toutes les remarque sont constructives
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2008 à 19:45
Salut
Décompose ce que tu as à faire et cherche de l'aide dans le forum ou les sources pour chacun :
- Créer une macro
- Ouvrir un fichier texte (Open)
- Se positionner sur cellule de la colonne X, ligne Y
- Faire un boucle de lecture des lignes du fichier (Do While EOF-Loop), donc lire une ligne du fichier (Line Input #)
- Se décaler d'une ligne sur ta feuille
- Tester si tu as atteint la ligne maximum (If)
- Changer de colonne X+1 et revenir à la ligne Y
- Refermer le fichier (Close #)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Rox74
Messages postés30Date d'inscriptionmercredi 9 avril 2008StatutMembreDernière intervention10 février 2011 10 avril 2008 à 13:28
Bonjour,
merci jack pour la démarche
Ma liste contient énormément de mots. C'est le dictionnaire francais ( environ 200 000 plus ou moin 50 000 je crois).
Je pense (et j'espère) qu'il me faudrait 4 colonnes.
J'ai trouvé un code ( que j'ai pas tout tout compris) qui m'ouvre une fenetre me permaitant de choisir mon fichier.
Mais ce dernier n'inscrit les 65536 premiers mots que une colonne et se bloque appres ( error "1004") donc je dois le modifier.
Voici une partie du code ( cette partie je l'ai comprise et commentée)
Open chemin For Input As #1
i = 0
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, temp ' Lit la ligne dans la variable.
Range("A10").Offset(i, 0).Value = temp ' "copie" la valeur lut dans la cellule (i, 0) a partir de la cellule A 10.
i = i + 1 ' valeur de i a chaque lecture d'une nouvelle ligne du fichier texte
' modif a faire pour dire quand i = 65537 inscrire valeur a partir
de la nouvelle cellule B10
Loop ' continue la boucle jusqu'à la fin du fichier
Close #1 ' Ferme le fichier
mais comment faire pour ecrire la modif en language VBA.
j'ai essayer quelques trucs mais sans résultats.
j'ai pensé a quelque chose comme ca
Open chemin For Input As #1
i = 0
j = 0
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, temp ' Lit la ligne dans la variable.
Range("A10").Offset(i, j).Value = temp
i = i + 1
If i 65526 Then i 0 And j = 1
le probleme c'est que j'ai bien plus ma liste qui s'affiche mais les 65536 premier mots sont effacés par les 65536 mots suivant et ainsi de suite.
Je n'ai pas de décalage de colonne
Donc je cherche, je cherche et je trouverai
Surement grace au forum et a vous.
RoX
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_faucheuse
Messages postés308Date d'inscriptionjeudi 10 janvier 2008StatutMembreDernière intervention27 octobre 2011 10 avril 2008 à 13:41
Avant d'essayer compliquer avec des offset (compliquer pour moiXD, je l'apprend sur ce post)
Moi j'essaierai quelque chose du genre quand on arrive a 65525, on fait une nouvelle boucle pour la colonne B (et apres j'essaierai d'ameliorer) :
i = 1
open "chemin" for input as 1
Do While Not EOF(1)
input #1, text
Range("A" & i).value = text
If (i>65525) then
Range("B" & i) = text
loop
close #1