besoin d'aide vba - VB/VBA/VBS - Programmation
Marsh Posté le 09-05-2006 à 12:39:08
La comparaison se faisant: sur les noms, les dates de création,les dates de modification, le contenu , le n° de version etc ?
Marsh Posté le 09-05-2006 à 20:20:29
Pour exactement, ainsi voir les noms de fichiers n'etant pas identique et les afficher.
Marsh Posté le 10-05-2006 à 12:33:51
un bout de code pour afficher dans une feuille Excel tous les fichiers inclus dans un dossier, ici C:\Transfert
En lançant la macro TestCreationListeFichiers
Dans environnement VBA ne pas oublier si nécessaire
de cocher Microsoft Office xx.x Object Library dans Outils/Références
sinon msg d'erreur Variable non définie ( msoFileTypeAllFiles )
|
Marsh Posté le 10-05-2006 à 15:13:49
Si par hasard tu veux connaitre les infos de taille,type,date de creation,de modif et de dernier acces
|
Marsh Posté le 10-05-2006 à 15:17:21
Pour ce qui est de la copie ,déplacement,effacement de fichiers
il faut utiliser des instructions du genre
Fichier.Copy "c:\Essais\" & Fichier.Name, True
Fichier.Move "c:\Essais\" & Fichier.Name
Fichier.Delete True
Marsh Posté le 10-05-2006 à 20:01:18
Merci a toi kiki29
C'est très sympa de ta part, je vais enfin pouvoir tester ça et comprendre comment ça marche.
Je te dirai si ça a bien fonctionné.
allez salut et merci encore!!
Marsh Posté le 10-05-2006 à 23:55:53
kiki29 a écrit : un bout de code pour afficher dans une feuille Excel tous les fichiers inclus dans un dossier, ici C:\Transfert |
Re moi,
J'ai donc repris ton bout de programme, pour faire afficher les noms des fichiers par colonne pour chaque dossier.
Cependant est t'il normal qu'il m'affiche dans Excel : le lien du fichier plutot que le nom du fichier? Si oui, quelle parametre dois je changer pour obtenir seulement le nom du fichiers.
Ensuite je souhaiterai savoir comment effectuer une comparaison de ces noms entre chaque dossier.
j'ai donc pensé à :
Comparer si la cellule A1 est identique à B(1,2,....) en fesant une boucle (si pas identique, afficher par exemple dans la colonne C le nom du fichier)
puis si la cellule A2 est identique à B(1,2,..)
et ainsi de suite.
Aurais tu un bout de code comme exemple reprenant le principe de ce genre de comparaison?
Merci beaucoup de tes réponses
Marsh Posté le 11-05-2006 à 08:21:16
Utilise le 2eme extrait de code et remplace
|
Sinon pour le 1er extrait tu tombes à priori sur des formules du genre
soit sur Excel pour filtrer le chemin retourné en utilisant la formule
|
soit en remplaçant Cells(i + 1, 1).Formula = ListeNomsFichiers(i)
par l'equivalent de la formule Excel çi-dessus en VBA
|
Pour la comparaison entre 2 colonnes essaie :
|
Marsh Posté le 11-05-2006 à 19:12:29
ok je vais essayé tout ça.
en tout cas merci pour ton aide, ça m'aide beaucoup.
Marsh Posté le 12-05-2006 à 19:00:37
kiki29 a écrit : Utilise le 2eme extrait de code et remplace |
tes codes marche très bien
je voulais juste savoir si on peut avoir le nom du fichier sans son extention? car là il me recupere genre (100285.part)
De plus est ce normal qu' il reussi a trouver les dossiers seulement que dans un seul disque? (genre seulement le F:\ et pas le N:\ par exemple)
Enfin as tu des connaissances en vbs?
Merci et bon week end
Marsh Posté le 12-05-2006 à 19:04:45
Je pense que tu parles de filtrage de fichiers selon leur extension :
Function CreationListeFichiers(FiltreFichier As String, InclureSousDossier As Boolean) As Variant
FiltreFichier ? dans CreationListeFichiers("*.xls", False) par exemple
' Dossier de test
ChDir "C:\Transfert"
A priori si tu changes C:\..\.. par autre chose , à toi d'adapter le code en conséquence si tu veux examiner en cascade des disques durs différents
Pour VBS voir le site http://www.bellamyjc.org/fr/vbscript.html
Marsh Posté le 14-05-2006 à 15:07:57
kiki29 a écrit : Je pense que tu parles de filtrage de fichiers selon leur extension : |
Marsh Posté le 14-05-2006 à 15:15:27
Non enfaite pour le filtrage de fichiers je veux tout simplement juste faire apparaitre le nom du fichiers sans son extention:
là il m'affiche sur excel par exemple Nom_fichier.part et moi je veux juste Nom_fichier
J'ai essayé plein de solution mais je n'arrive pas.
Marsh Posté le 14-05-2006 à 16:43:59
Cela n'a à priori rien de gênant, d'une longue pratique héritée du Dos j'ai toujours préféré voir l'extension à la suite du nom de fichier et cela même sur MacIntosh et cette pratique m'a donné raison.
Dans la liste des fichiers sur ta feuille Excel si par hasard on a FiltreFichier = "*.*" rien ne va discerner un executable d'un fichier Excel, Word ou Acrobat ou eDonkey ?
Enfin moi c'est par expérience mais si tu veux tenter tu rajoutes en dessous de la ligne
qui te formate le nom de fichier qqch comme :
Cells(i + 1, 1).Formula = Left(Cells(i + 1, 1), Application.Find(".", Cells(i + 1, 1), 1) - 1)
Marsh Posté le 14-05-2006 à 18:16:42
kiki29 a écrit : Cela n'a à priori rien de gênant, d'une longue pratique héritée du Dos j'ai toujours préféré voir l'extension à la suite du nom de fichier et cela même sur MacIntosh et cette pratique m'a donné raison. |
Merci mais enfaite je veux pas faire afficher l'extention tout simplement parce que sinon la comparaison va en tenir compte et donc faussé le resultat.
ex: fichier1.part et fichier1.igs
=> leurs noms sont pourtant identique mais sachant que l'extention n'est pas identique, le problème est qu'il va les considérer comme non identique.
Sinon comment je pourrais faire la comparaison seulement entre les noms des fichiers sans prendre en compte l'extention. (de plus les noms de mes fichiers sont des chiffres, ce qui pourrai facilité le code non?)
C'est pourquoi je voulais recuperer juste le nom pour ainsi faciliter la comparaison. Mais si tu as une autre solution je suis ouvert a tte proposition
Marsh Posté le 14-05-2006 à 18:29:21
Non enfin de compte, je vais laisser comme ceci avec ta solution:
Cells(i + 1, 1).Formula = Left(Cells(i + 1, 1), Application.Find(".", Cells(i + 1, 1), 1) - 1)
Maintenant me reste plus que ma partie vbs.
Je tiens surtout à te remercier de la rapidité de ton aide très détaillé, qui m'a été très utile et permis d'avancé.
Bonne soirée a toi!!
Marsh Posté le 14-05-2006 à 19:19:56
Va jeter un oeil sur http://www.bellamyjc.org/fr/vbscript.html pour VBS
a mon avis l'un des meilleurs sites francophones
ainsi que http://tahe.developpez.com/web/vbscript/
Marsh Posté le 18-05-2006 à 22:10:18
kiki29 a écrit : Va jeter un oeil sur http://www.bellamyjc.org/fr/vbscript.html pour VBS |
salut
Toute compte fait je me suis aperçu que je pouvais faire mon code avec l'editeur vba du logiciel "catia" (logiciel de cao) au lieu du vbs, cependant dans cet editeur vba, il n'y pas de lien avec un fichier excel ce qui me pose probleme pour pouvoir stocker des données.
Donc puis je faire appel à mon fichier vba (celui avec Excel: pour la comparaison des noms de fichier) à partie de l'editeur vba , puis récuperer par exemple les liens de mes fichiers issue de la comparaison pour permettre l'operation d'enregistrement avec le logiciel sous un autre dossier.
un exemple que j'ai fait :
Sub CATMain()
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim partDocument1 As PartDocument
Set partDocument1 = documents1.Open("D:\projet trappe\r13\chape a souder.CATPart") " récuperer n lien sur une colonne excel du fichier vba appellé"
Set partDocument1 = CATIA.ActiveDocument
partDocument1.ExportData "F:\Documents and Settings\chape a souder.igs", "igs" "convertir le fichier ouvert ds un autre dossier"
Set partDocument1 = CATIA.ActiveDocument
partDocument1.Close
" une boucle jusqu'a n lien récuperer"
End Sub
Ici mon gros soucis est de pouvoir récuperer les données issue de mon code de comparaison.
Voila, merci de ton aide
Si d'autre personne pourrait m'éclairer sont la bienvenu aussi
Marsh Posté le 19-05-2006 à 04:32:37
n'ayant pas la Catia à dispo je ne t'apporterais à priori que peu d'aide
Marsh Posté le 19-05-2006 à 20:15:00
non enfaite peu importe catia ou pas, mes questions sont purement vba :
Sous un fichier VBA je souhaite juste savoir comment faire appelle à un fichier texte comportant differents noms de fichiers pour ensuite agir dessus??
exemple:
sous VBA:
- je fait appelle à un fichier texte pour ensuite agir sur les noms qui comportent: (ex= noms1 , nom2, ....)
- Puis ouvrir chacun de ces fichiers et les enregistrer sous une autre extension chacun à leur tour dans un autre repertoire.
Je voudrais juste un exemple de code pour ce type d'operation.
merci
Marsh Posté le 20-05-2006 à 03:59:11
Je pense que tu as déjà toutes les infos nécessaires
il existe des instructions :
fso.FileExists Destination & fichier
fso.CopyFile Source & fichier, Destination, True
fso.MoveFile Source & file, Destination
fso.DeleteFile file, True
bref dans le bon contexte taper FSO. (FSO point) et voir la liste déroulante
Marsh Posté le 20-05-2006 à 18:10:08
enfaite, j'ai un petit soucis que je n'ai toujours pas resolu, tu vois la fonction du debut qui permet de scanner les noms de fichiers, je n'arrive tjrs pas a changer de destination de disque sans que cela marche.
y'a pourtant que cette ligne à changer??
ChDir "C:\Transfert"
Marsh Posté le 20-05-2006 à 20:51:40
Autant pour moi
Remplace aux endroits indiqués
Il n'y avait pas de gestion d'erreurs
du style aucun fichier dans dossier de test
|
ou alors
|
Marsh Posté le 22-05-2006 à 12:25:45
Option Explicit
Function CreationListeFichiers(ByVal dossier As String, ByVal FiltreFichier As String, ByVal InclureSousDossier As Boolean) As Variant
Dim ListeFichiers() As String, NbFichiers As Long
CreationListeFichiers = ""
Erase ListeFichiers
If FiltreFichier = "" Then FiltreFichier = "*.*"
With Application.FileSearch
.NewSearch
.LookIn = dossier
.Filename = FiltreFichier
.SearchSubFolders = InclureSousDossier
.FileType = msoFileTypeAllFiles
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) = 0 Then Exit Function
ReDim ListeFichiers(.FoundFiles.Count)
For NbFichiers = 1 To .FoundFiles.Count
ListeFichiers(NbFichiers) = .FoundFiles(NbFichiers)
Next NbFichiers
.FileType = msoFileTypeExcelWorkbooks
End With
CreationListeFichiers = ListeFichiers
Erase ListeFichiers
End Function
Sub TestCreationListeFichiers()
Dim ListeNomsFichiers As Variant, i As Integer,
' Dossier de test
dossier = "E:\Documents and Settings\All Users\Application Data\Microsoft\Office\Data"
ListeNomsFichiers = CreationListeFichiers("*.*", False)
Range("A:A" ).ClearContents
If ListeNomsFichiers <> "" Then
For i = 1 To UBound(ListeNomsFichiers)
Cells(i + 1, 1).Formula = ListeNomsFichiers(i)
Next i
End If
End Sub
voila la modif que j'ai faite selon ce que tu ma dit mais cela ne fonctionne tjrs pas: variable non défini. je pense que cela doit etre la variable "dossier"???
Mais je me pose qd meme la question, pk le code de base sans modif fonctionne bien sur les destinations de mon disque principale et par contre sur les autres disques (N:\ , D:\, ...) non?
Marsh Posté le 22-05-2006 à 17:41:55
Dans VBA Debogage CompilerVBA Project et tu auras la réponse
Marsh Posté le 08-05-2006 à 22:04:07
bonjour a tous!!!
je souhaiterai savoir comment créer une routine pour faire la comparaison des fichiers entre plusieurs répertoires.
Si quelqu'un pourrait m'aider ça sera la bienvenu
merci