COPIER DES DOSSIERS/FICHIERS [Résolu]

Signaler
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006
-
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006
-
Bonjour,

je vous expose mon problème (qui n'en sera pas un pour vous ^^) en essayant d'être le plus clair possible :

Sur un serveur, appelé Srv1, se trouvent ces répertoires : prod1, prod2, prod3. Dans ces dossiers se trouvent certains fichiers, pas toujours les mêmes qui sont des fichiers de développement.

Sur un autre serveur, appelé Srv2, se trouvent les mêmes répertoires. Mais ces dossiers et fichiers sont en production, c'est-à-dire qu'ils sont utilisés via une application.

Ce que je souhaiterais pouvoir réussir à faire, c'est créé une interface avec 3 boutons qui ferait ceci :

Bouton 1 : copie du répertoire Prod1 (avec sous-répertoires et fichiers) de srv1 vers srv2
Bouton 2 : ""                  ""       Prod2 "       "          "        "     "
Bouton 3 : ""                  ""       Prod3

Les fichiers de srv1 remplaceraient ceux de srv2. En fait, il s'agit d'une mise à jour de fichiers faite par un "simple" copier/coller.

Auriez-vous le temps, la possibilité, la gentillesse de me dépanner siouplait ?

(Peut-être faudrait-il faire un map de lecteur réseau, je sais pas trop)

J'y connais fichtrement rien en VB.Je farfouille à gauche, à droite, teste le FSO mais j'y panne que dalle...

A l'aiiiiiiiiiiiiide :)

Bien à vous

13 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,

Essaie ceci

Dim Fso As New FileSystemObject 
Dim Srv1 As String 
Dim Prod1 As String 
Dim Srv2 As String 

Srv2 = "\\srv2\autrechemin" 
Srv1 = "\\srv1\chemin" 
Prod1 = "Prod1" 
Call Fso.CopyFolder(Srv1 & Prod1, Srv2 & Prod1, True) 

Set fso = Nothing 

@+,   Ju£i?n
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Re,

Pour la demande de confirmation de copie
'Remplace source et destination par les variables adequat
If MsgBox("Etes vous sur de vouloir copie " & Source & " vers " & Destination, vbQuestion + vbYesNo, "Confiramtion") = vbYes Then 
        Call Fso.CopyFolder(Source, Destination, True) 
End If 
Set Fso = Nothing

Si tu veux indiquer les nombre de repertoire et fichier copié (+ barre de progression) peu etre devrait tu t'orienter vers une copie recursive

@+,   Ju£i?n
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Re,
Combien as tu de fichiers, car si il y en a bcp, il faut oublier le simple MsgBox pour afficher les fichiers qui vont etre copier.

Teste le code suivant (ajoute un listbox sur une feuille)

Private Sub Form_Load() 
Dim Fso As New FileSystemObject 
Dim result As String 
Dim lists() As String 
Dim i As Integer 
    result =  ListRep("REpertoire a lister", Fso) 
    lists = Split(result, vbCrLf) 
    For i =  LBound (lists) To UBound(lists) 
        Call List1.AddItem(lists(i)) 
    Next 
    Set Fso  = Nothing 
End Sub 

Private Function ListRep(Rep As String, Fso As FileSystemObject) As String 
    Dim Fol As Folder 
    Dim Fi As File 

    For Each Fi In Fso.GetFolder(Rep).Files 
        ListRep = ListRep & vbCrLf & Fi.Path 
    Next 

    For Each Fol In Fso.GetFolder(Rep).SubFolders 
        ListRep = ListRep & vbCrLf & ListRep(Fol.Path, Fso) 
    Next 
End Function

@+,   Ju£i?n
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,

Explication.
Split: Fonction renvoyant un tableau de base 0 à une dimension contenant les sous chaines.
En francais: Cette fonction "Casse" une chaine en sous chaine en cherchant le delimiteur passé en parametre.
Exemple: Soit result = "salut_comment_ca_va_aujourd'hui"
Si tu fais  lists = Split(result, "_")       et bien ton tableau sera:
    Lists(0) => "salut"
    Lists(1) = > "comment"
    Lists(2) => "ca"
    Lists(3) => "va"
    Lists(4) => "aujourd'hui"

  LBound (lists) To UBound(lists) :  LBound (Ubound) =  Renvoie un valeur de type long contenant le plus petit (grand) indice disponible pour la dimension indiqué d'un tableau.
Suite de l'Exmple precedent: LBound(Lists) = > 0 (car le tableau commence à 0)
                                            Ubound(Lists) => 4 (car le tableau se termine à 4)

Donc avec une boucle allant de Lbound à UBound tu parcours tout le tableau

Set Fso = Nothing:
Pour faire simple: On a créée en mémoire un Objet Fso (Dim Fso As  New
 FileSystemObject ) Il faut une fois termine nos opération "détruire" l'objet pour ne pas qu'il reste => Set Fso = Nothing:
Voila j'espere que tu es un peu plus éclairé

Note: le bouton Réponse acceptée c'est mieux si tu l'utilises sur les post de ceux qui ont pu t'aidé (sauf si tu estimes que personne de t'as aidé a résoudre le problème)
@+,   Ju£i?n
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006

Merci beaucoup jrivet, cela répond bien à ma question...

Par contre prod1 n'est p'tet pas utile en fait....

Ceci étant, y'a-t-il possibilité d'avoir une confirmation en fin de copie ? Du style : xx fichiers dans yy répertoires copiés, ou une barre de progression (quoique, vu la taille totale des fichiers à copier, c'est p'tet pô la peine...Pas le temps de la voir)..

Enfin, un message stipulant que ça a été copié...

Et (oui, je suis chiant), limite une demande de confirmation avant la copie : "Etes vous sur de vouloir effectuer la copie de svr1 vers srv2?"

En tout cas, merci bien, à la rigueur, je vais essayer de me dépatouiller avec ça...
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
Pour le message stippulant que ça a été copié, il te suffit de mettre un message box à la fin du code de jrivet :
MsgBox "Copie terminée".

Pour demander si tu veux vraiment effectuer la copie, il te suffit d'encadrer le code de jrivet avec une condition.

Tu peux mettre un truc de ce style avant son code :
Dim Copie as string
Copie = MsgBox("Voulez-vous copier le répertoire ?", vbYesNo)
If copie = vbyes then
   'code de jrivet
end if

Molenn
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006

C'est vraiment extra d'avoir des réponses aussi rapidement...Merci beaucoup..

Je vais continuer à être embêtant :

Est-il possible qu'il y ait, à la fin de la copie (voire au début) la liste des fichiers/Dossiers qui vont être copiés ou qui ont été copiés ?

Merci encore, c'est bien côOl
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006

Oui, il y a pas mal de fichiers....Enfin, ça dépend des fois..Ceci étant, je vois pas trop où placer ce code...(désolé d'être un rhoOooO Boulay -___-" )
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
re,
si tu est bien sous vb6 alors tu as juste a copier/coller le code
(sauf si tu as deja qqch d'ecrit dans  le Form_Load)
et a ajouter une LIstBox sur la feuille (Form)

en tout cas si il y as beaucoup de fichiers oublie le MsgBox
@+,   Ju£i?n
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006

Ah ah ! mais c'est nickel ça.... Mais attention, encore plus dur, la compilation de tout ça ^^

C'est-à dire :
Bouton 1 renvoie une fenêtre de confirmation : "êtes vous sur de vouloir copier ces fichiers de srv1 à srv2 ?" avec en dessous, dans la listbox, les fichiers correspondant..

Bouton 2 : idem

etc...

En fait, en cliquant sur un bouton, il faudrait que la "variable" située dans ListRep change en fonction du répertoire concerné.

ex :

Si je clic sur PROD-APRR, dans la listbox en dessous, le chemin devrait être [file://\\nt01m[...]\PROD-APRR\data \\nt01m[...]\PROD-APRR\data][...]
Si je clic sur QUALIF-ATMB, dans la listbox en dessous, le chemin devrait être [file://\\nt01m\[...]QUALIF-ATMB\ \\nt01m\[...]QUALIF-ATMB\][...]

Voyez-vous ce que je veux dire ^^

Je parviens à changer ça en déclarant
srv1 = [file://\\nt01 nt01]m\...
srv2 = ...

et en modifiant la ligne result=listrep(SRVx, fso) mais je souhaiterais que cela soit fait automatiquement en même temps que l'apparition de la boite de confirmation..

Bon :
1- Je suis réellement navré de vous enquiquiner autant
2- Je vous remercie énormément du temps que vous prenez pour m'aider
3- J'apprends en même temps et ça c'est bien côOl
4- N'hésitez pas à m'envoyer ch... si c'est trop lourd à faire ;)
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006

Arf, j'peux pô éditer mon message...Dsl du flôOd...

Donc, en fait, pour chaque bouton, j'ai rappelé la Fonction ListRep en ayant, au préalable, déclaré la variable srv

Pour le bouton qualif-atmb_clic
dim srv3 as string
srv3 = [file://\\nt01m[.......] \\nt01m[.......]]

result=listrep(srv3,fso)

A voir si ça fonctionne ^^
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006

Et bien, en fait, je souhaitais juste remercier les personnes m'ayant répondu ce qui m'a grandement aidé... (Enfin, en même temps, c'zest vous qui avez écrit le programme en fait ^^)

Ceci étant, je comprends pas tout à fait ceci :

result =  ListRep("REpertoire a lister", Fso) <--- appel de la fonction ListRep déclarée
    lists = Split(result, vbCrLf)                      |
    For i =  LBound (lists) To UBound(lists) |-- ce sont ces lignes que je saisi pas...
        Call List1.AddItem(lists(i))                 |
    Next 
    Set Fso  = Nothing  <--- ça sert à quoi cette ligne ?

Donc, Split permet de mettre en page le "tableau" Lists mais je capte rien en fait... Si vous pouviez m'expliquer ou me trouver un lie (j'ai chercher dans l'MSDN mais rien ne reseemble à ça ^^)

Cordialement
Messages postés
17
Date d'inscription
mardi 24 octobre 2006
Statut
Membre
Dernière intervention
15 novembre 2006

Un grand et énoOOOOorme MERCI

aller, j'arrête de vous embêter...(pour le moment...) ^^

Bonne continuation.

PS : Désolé pour les réponses acceptées..Je corrige de suite...