Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fichier Texte - Séparateur de champs

6 réponses
Avatar
Super_tonic
Bonjour à tous.
J'aurais besoin d'un coup de main. Je ne sais pas du tout comment faire et
par quoi commencer.

Je vous explique.
Je parviens à Editer dans un fichier texte le contenu d'un répertoire, à
partir de l'explorateur windows. (Source que j'ai trouvé dans les trucs de
W98)
"Command.com /c dir /b/s> c:\Listing.txt"
Donc avec un clic droit, j'ai un p'tit menu, "Lister" qui réalise un fichier
texte appelé Listing.txt.

Bon jusque là tout va bien. Ensuite je l'ouvre dans Excel.
Alors là commene le Hic.

Je converti pour séparer les champs sur un caractère donné : le "\"

Mais en fait je voudrai avoir une macro qui sache lire le fichier texte,
pour me mettre en col.A par exemple le chemin complet et en col.B juste le
nom du fichier.

Parceque là tout ce retrouve mélanger. Comment je peux faire.
Sachant que mes répertoires comportent des sous répertoires etc...

Si vous avez des idéees ou des trucs qui peuvent m'aider .... je suis dans
les choux !

Ah oui juste un point : je suis pas un pro de VB, je me débrouille, enfin je
bidouille

Merci Beaucoup

6 réponses

Avatar
FxM
Bonjour,

A placer dans le module de la feuille qui contient les chemins :
Alt-F11, double-clic sur le nom de la feuille puis colle ce qui suit.

Execute-le en mode pas à pas (presse F8) pour voir si c'est OK. Su
oui, continue par F5.

Sub test()
'va parcourir la colonne A
For a = 1 To Range("A65536").End(xlUp).Row
'lit le nom du fichier
fil = Range("A" & a).Value
'parcoure le nom du fichier à partir de la fin
For b = Len(fil) To 1 Step -1
'et cherche le
If Mid(fil, b, 1) = "" Then
'séparation
Range("A" & a).Value = Left(fil, b - 1)
Range("B" & a).Value = Right(fil, Len(fil) - b)
'et ne pas poursuivre avec le même fichier
b = 1
End If
Next b
Next a
End Sub

@+
FxM



Super_tonic wrote:

Bonjour à tous.
J'aurais besoin d'un coup de main. Je ne sais pas du tout comment faire et
par quoi commencer.

Je vous explique.
Je parviens à Editer dans un fichier texte le contenu d'un répertoire, à
partir de l'explorateur windows. (Source que j'ai trouvé dans les trucs de
W98)
"Command.com /c dir /b/s> c:Listing.txt"
Donc avec un clic droit, j'ai un p'tit menu, "Lister" qui réalise un fichier
texte appelé Listing.txt.

Bon jusque là tout va bien. Ensuite je l'ouvre dans Excel.
Alors là commene le Hic.

Je converti pour séparer les champs sur un caractère donné : le ""

Mais en fait je voudrai avoir une macro qui sache lire le fichier texte,
pour me mettre en col.A par exemple le chemin complet et en col.B juste le
nom du fichier.

Parceque là tout ce retrouve mélanger. Comment je peux faire.
Sachant que mes répertoires comportent des sous répertoires etc...

Si vous avez des idéees ou des trucs qui peuvent m'aider .... je suis dans
les choux !

Ah oui juste un point : je suis pas un pro de VB, je me débrouille, enfin je
bidouille

Merci Beaucoup




Avatar
FxM
Pour compléter, tu pourrais lire directement le contenu du répertoire
par VBA (en référence ma réponse de12h23 au message de dan à 12h14) :

Une limite : comme tu copies dans une feuille -> pas plus de 65536
fichiers par page ;o))

Sub Filesearch1()
With Application.FileSearch
.NewSearch
.LookIn = "C:" '<== Put your directory here
.SearchSubFolders = True '<= setting to recurse directories
.Filename = "*.*"
.Execute
i = 0
For Each f In .FoundFiles
i = i + 1
Cells(i, 1).Select
ActiveCell.Value = f
For b = Len(f) To 1 Step -1
If Mid(f, b, 1) = "" Then
activecell.value = Left(fil, b - 1)
activecell.offset(0,1).Value = Right(fil, Len(fil) - b)
b = 1
End If
Next b
Next f
end with
End Sub

@+
FxM
Avatar
Super_tonic
Salut !
C'est génial ton truc ... Je vais le mettre en oeuvre. Si je rencontre des
Pb je te tiens au courant.
Merci vraiement Bcp

"FxM" a écrit dans le message news:

Pour compléter, tu pourrais lire directement le contenu du répertoire
par VBA (en référence ma réponse de12h23 au message de dan à 12h14) :

Une limite : comme tu copies dans une feuille -> pas plus de 65536
fichiers par page ;o))

Sub Filesearch1()
With Application.FileSearch
.NewSearch
.LookIn = "C:" '<== Put your directory here
.SearchSubFolders = True '<= setting to recurse directories
.Filename = "*.*"
.Execute
i = 0
For Each f In .FoundFiles
i = i + 1
Cells(i, 1).Select
ActiveCell.Value = f
For b = Len(f) To 1 Step -1
If Mid(f, b, 1) = "" Then
activecell.value = Left(fil, b - 1)
activecell.offset(0,1).Value = Right(fil, Len(fil) - b)
b = 1
End If
Next b
Next f
end with
End Sub

@+
FxM



Avatar
Super_tonic
Salut
Alors je viens de mettre en application tes 2 codes !
Le premier :
Tout va super bien, ça marche plus que Nikel !
En plus etant donné que tu m'as tout bien expliqué dans le code, ben je
comprend tout .... et ça fait du bien :-)
Je te suis vraiement bcp Reconnaissant

Le second :
Alors là par contre piti problème.
J'ai un message d'erreur sur la ligne :
ActiveCell.Offset(0, 1).Value = Right(fil, Len(fil) - b)
-> Erreur d'exécution 5 : Argument ou appel de procédure incorect.

Et la feuille Excel reste vierge. Pourtant lors de l'écution pas à pas la
macro trouve un premier fichier puis plus aucun. Et enfin l'efface.

Voilà

Vraiement encore merci !

"FxM" a écrit dans le message news:

Pour compléter, tu pourrais lire directement le contenu du répertoire
par VBA (en référence ma réponse de12h23 au message de dan à 12h14) :

Une limite : comme tu copies dans une feuille -> pas plus de 65536
fichiers par page ;o))

Sub Filesearch1()
With Application.FileSearch
.NewSearch
.LookIn = "C:" '<== Put your directory here
.SearchSubFolders = True '<= setting to recurse directories
.Filename = "*.*"
.Execute
i = 0
For Each f In .FoundFiles
i = i + 1
Cells(i, 1).Select
ActiveCell.Value = f
For b = Len(f) To 1 Step -1
If Mid(f, b, 1) = "" Then
activecell.value = Left(fil, b - 1)
activecell.offset(0,1).Value = Right(fil, Len(fil) - b)
b = 1
End If
Next b
Next f
end with
End Sub

@+
FxM



Avatar
michdenis
Bonjour Super_Tonic,

A ) Les variables de ta procédure ne sont pas déclarées. Cela ne fait pas planté ta procédure mais rend la lecture du code
plus difficile.

Exemple :

"activecell.offset(0,1).Value = Right(fil, Len(fil) - b)"

Que représente la variable "fil" dans cette ligne de code. A moins que ce soit une variable déclaré à l'extérieur de cette
procédure, "Fil" renvoie une valeur "Vide". Si cela est vrai, la fonction "Right" ne peut évaluer une valeur négative comme
second argument : Len(fil)-b = - ? . En conséquence, cela provoque exactement le type d'erreur que tu as décrit.

Et si tu remplaçais, la variable "Fil" par "f " tout simplement !!!

P.S. Si dans le haut de ton module (première ligne) , tu inscrivait ceci : Option Explicit , cela éviterait ce type d'erreur
puisque tu serais tenu de déclarer chacune de tes variables. Et en cas d'erreur d'orthographe dans l'écriture d'une de tes
variables, tu obtiendrais un message d'erreur à cet effet.



Salutations!








"Super_tonic" a écrit dans le message de news:
Salut
Alors je viens de mettre en application tes 2 codes !
Le premier :
Tout va super bien, ça marche plus que Nikel !
En plus etant donné que tu m'as tout bien expliqué dans le code, ben je
comprend tout .... et ça fait du bien :-)
Je te suis vraiement bcp Reconnaissant

Le second :
Alors là par contre piti problème.
J'ai un message d'erreur sur la ligne :
ActiveCell.Offset(0, 1).Value = Right(fil, Len(fil) - b)
-> Erreur d'exécution 5 : Argument ou appel de procédure incorect.

Et la feuille Excel reste vierge. Pourtant lors de l'écution pas à pas la
macro trouve un premier fichier puis plus aucun. Et enfin l'efface.

Voilà

Vraiement encore merci !

"FxM" a écrit dans le message news:

Pour compléter, tu pourrais lire directement le contenu du répertoire
par VBA (en référence ma réponse de12h23 au message de dan à 12h14) :

Une limite : comme tu copies dans une feuille -> pas plus de 65536
fichiers par page ;o))

Sub Filesearch1()
With Application.FileSearch
.NewSearch
.LookIn = "C:" '<== Put your directory here
.SearchSubFolders = True '<= setting to recurse directories
.Filename = "*.*"
.Execute
i = 0
For Each f In .FoundFiles
i = i + 1
Cells(i, 1).Select
ActiveCell.Value = f
For b = Len(f) To 1 Step -1
If Mid(f, b, 1) = "" Then
activecell.value = Left(fil, b - 1)
activecell.offset(0,1).Value = Right(fil, Len(fil) - b)
b = 1
End If
Next b
Next f
end with
End Sub

@+
FxM



Avatar
FxM
Bonsoir,

Comme te l'a écrit Denis, change 'fil' en 'f' et ça roule.
J'ai regroupé deux procédures sans vérifier jusqu'au bout la cohérence
des variables. Sorry ;o(

@+
FxM



Super_tonic wrote:
Salut
Alors je viens de mettre en application tes 2 codes !
Le premier :
Tout va super bien, ça marche plus que Nikel !
En plus etant donné que tu m'as tout bien expliqué dans le code, ben je
comprend tout .... et ça fait du bien :-)
Je te suis vraiement bcp Reconnaissant

Le second :
Alors là par contre piti problème.
J'ai un message d'erreur sur la ligne :
ActiveCell.Offset(0, 1).Value = Right(fil, Len(fil) - b)
-> Erreur d'exécution 5 : Argument ou appel de procédure incorect.

Et la feuille Excel reste vierge. Pourtant lors de l'écution pas à pas la
macro trouve un premier fichier puis plus aucun. Et enfin l'efface.

Voilà

Vraiement encore merci !

"FxM" a écrit dans le message news:


Pour compléter, tu pourrais lire directement le contenu du répertoire
par VBA (en référence ma réponse de12h23 au message de dan à 12h14) :

Une limite : comme tu copies dans une feuille -> pas plus de 65536
fichiers par page ;o))

Sub Filesearch1()
With Application.FileSearch
.NewSearch
.LookIn = "C:" '<== Put your directory here
.SearchSubFolders = True '<= setting to recurse directories
.Filename = "*.*"
.Execute
i = 0
For Each f In .FoundFiles
i = i + 1
Cells(i, 1).Select
ActiveCell.Value = f
For b = Len(f) To 1 Step -1
If Mid(f, b, 1) = "" Then
activecell.value = Left(fil, b - 1)
activecell.offset(0,1).Value = Right(fil, Len(fil) - b)
b = 1
End If
Next b
Next f
end with
End Sub

@+
FxM