IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[Fichier] Intégration de variable ?


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut [Fichier] Intégration de variable ?
    Bonjour tout le monde ! Je n'ai pas l'habitude de poster dans des forums, mais je suis complétement bloqué, j'ai besoin de votre aide !

    Je m'explique : J'ai une listbox, qui contient des chemins d’accès de fichier, et une dirlistbox, qui contient aussi des chemin d’accès mais de dossier.
    Le but du jeu, c'est d'ouvrir un .bat, d'envoyer les chemins d’accès en paramètre en poffinant une syntaxe pour ouvrir Robocopy pour que l'utilisateur puisse copier les fichiers qu'il a sélectionné dans les boxs que j'ai cité plus haut.

    J'en suis alors arrivé a ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    'MsgBox "il y a " & CStr(GetSelectedItems(img_list)) & "  item(s) sélectionné(s)"
    Dim ret As Long
    Dim i As Integer
    Dim nb_ligne As Integer
    Dim destination As String
    Dim source As String
    nb_ligne = GetSelectedItems(img_list)
    'Pour chaque ligne de la list box on rajoute une ligne dans le .bat
    'les """ sont la pour faire en sorte que les dossiers avec plus de 6
    'caractères passent sans problemes ! a chaque tour de boucle on ouvre le
    'fichier, on rajoute la ligne, et on le ferme ect...
    'IL FAUT TROUVER COMMENT PASSER EN PARAMETRE LA VARIABLE SOURCE ET DESTINATION
    For i = 0 To nb_ligne
        source = "robocopy" + img_list.ItemData(i)
        destination = dir2.Path + " /E /SEC"
        Open "C:\rbcpy_line.bat" For Append As #1
            Print #1, source, destination
            'Print #1, "Ma ligne DOS 2"
        Close #1
    Next
        Open "C:\rbcpy_line.bat" For Append As #1
            Print #1, "pause"
            'Print #1, "Ma ligne DOS 2"
        Close #1
    'On sort de la boucle, et on lance le bat obtenu !
    '(On ne va pas le lancer à chaque tour de boucle hein !)
    ret = Shell("C:\rbcpy_line.bat", vbNormalFocus)
    End Sub
    Mais on dirait que lors du premier Print #1 il ne reconnait pas mes variables puisque dans la fenêtre dos qui s'ouvre si il ne m'affiche pas une erreur, je vois les chemins d’accès : D:\Monprogramme\source et D:\Monprogramme\destination

    Comment lui faire comprendre que source et destination CONTIENNENT des chemins d’accès ?

    edit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For i = 0 To nb_ligne
        source = """+img_list.ItemData(i)+"""
        destination = """+dir2.Path+"""
        Open "C:\rbcpy_line.bat" For Append As #1
            Print #1, "robocopy" & source; destination & " /E /SEC"
            'Print #1, "Ma ligne DOS 2"
         Close #1
    Next
    J'ai essayé ça aussi xD

    edit 2 : en trafiquant le code (bob le bricoleur ) il semblerait que ce soit le type de la fonction qui accueille l'objet de la listbox qui poserait problème...
    Ce n'est pas un string ? O_o
    Merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut
    Bon, j'ai trouvé la solution a mon probleme, enfin partiellement car Robocopy semble faire des siennes...

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Private Sub copie_fichier_Click()
    '----------------------------------------------------------------------------------------------
    'Procédure qui lance un fichier .bat qui se trouverais sur le serveur
    'Elle écrit dans le fichier .bat et se fichier .bat lance robocopy
    'Avec les dossier source et destination en parametre.
    '----------------------------------------------------------------------------------------------
     
        'MsgBox "il y a " & CStr(GetSelectedItems(img_list)) & "  item(s) sélectionné(s)"
        Dim ret As Long
        Dim i As Integer
        Dim nb_ligne As Integer
        Dim destination As String
        Dim source As String
        nb_ligne = GetSelectedItems(img_list)
        'Pour chaque ligne de la list box on rajoute une ligne dans le .bat
        'les """ sont la pour faire en sorte que les dossiers avec plus de 6
        'caractères passent sans problemes ! a chaque tour de boucle on ouvre le
        'fichier, on rajoute la ligne, et on le ferme ect...
        For i = 0 To nb_ligne
            source = GetItemText(i)
            destination = dir2.Path
            source = "" + source + ""
            destination = "" + destination + ""
            Open "C:\rbcpy_line.bat" For Append As #1
                Print #1, "robocopy " & source, destination & " /SEC"
                'Print #1, "Ma ligne DOS 2"
            Close #1
        Next
            Open "C:\rbcpy_line.bat" For Append As #1
                Print #1, "pause"
                'Print #1, "Ma ligne DOS 2"
            Close #1
        'On sort de la boucle, et on lance le bat obtenu !
        '(On ne va pas le lancer à chaque tour de boucle hein !)
        ret = Shell("C:\rbcpy_line.bat", vbNormalFocus)
    End Sub

    Lorsque je ne selectionne qu'un fichier, il y'a bien dans mon .bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    robocopy S:\Stage\Projet1.ico s:\Dossiertest /SEc
    pause
    Mais robocopy ajoute automatiquement un antislash a la fin de mon .ico, et il le prends comme un dossier ducoup il plante
    Vous avez déjà eu ce genre de probleme ?
    Comment faire comprendre a robocopy qu'il ne faut pas ajouter d'antislash a projet1.ico ? j'ai balayé toute les options sur dos je ne vois pas comment faire, merci

    ps : Pour copier des dossier il marche nickel maintenant

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Par défaut
    Bonjour,

    Et si tu essayais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Open "C:\rbcpy_line.txt" For Append As #1
    Ouvre ton fichier comme un simple fichier texte,
    puis tu écris dans ce fichier texte tes commandes, tu fermes ton fichier.

    Puis tu te sers de l'instruction "rename" pour changer le nom du fichier:
    "rbcpy_line.txt" en "rbcpy_line.bat"

    Ensuite tu lances ton fichier .bat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        ret = Shell("C:\rbcpy_line.bat", vbNormalFocus)

  4. #4
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Bonjour,

    ce probleme n'a rien a voir avec VB6, c'est un probleme de syntaxe de ton instruction.
    Il suffit d'aller voir sur Google pour trouver que la syntaxe pour copier un fichier est de type :

    robocopy source destination FichierACopier

    Un lien parmi tant d'autres qui explique la syntaxe de Robocopy

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut
    @OhMonBato : Oui, je m'en suis rendu compte juste avant de partir manger, j'ai honte, tout ce temps perdu...
    J'ai aussi eu un peu de mal pour obtenir dans mes variables les chaines de caracteres de sorte a ce que ça corresponde aux exigences de syntaxe de robocopy ducoup ça fait un peu code "bricolé", mais tout marche !

    Si ça peut servir, le code pour generer une ligne robocopy en fonction de Drive/dir/filelistbox et listbox
    code pour fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Private Sub copie_fichier_Click()
    '----------------------------------------------------------------------------------------------
    'Procédure qui lance un fichier .bat qui se trouverais sur le serveur
    'Elle écrit dans le fichier .bat et se fichier .bat lance robocopy
    'Avec les dossier source et destination en parametre.
    '----------------------------------------------------------------------------------------------
     
        'MsgBox "il y a " & CStr(GetSelectedItems(img_list)) & "  item(s) sélectionné(s)"
        Dim ret As Long
        Dim i As Integer
        Dim nb_ligne As Integer
        Dim destination As String
        Dim source As String
        Dim fichier As String
        nb_ligne = GetSelectedItems(img_list)
        'Pour chaque ligne de la list box on rajoute une ligne dans le .bat
        'les """ sont la pour faire en sorte que les dossiers avec plus de 6
        'caractères passent sans problemes ! a chaque tour de boucle on ouvre le
        'fichier, on rajoute la ligne, et on le ferme ect...
        For i = 0 To nb_ligne - 1
        'on joue avec les trois variables fichier, source et destination pour récuperer la chaine de caractere voulu :
            source = GetItemText(i)
            fichier = Nomfichier(source)
            source = dir1.Path
            destination = dir2.Path
            'on rajoute les guillemets a source et a destination :
            source = "" & source & ""
            destination = "" & destination & ""
            Open "C:\rbcpy_line.bat" For Append As #1
                Print #1, "robocopy " & source, destination, fichier & " /SEC"
                'Print #1, "Ma ligne DOS 2"
            Close #1
        Next
            Open "C:\rbcpy_line.bat" For Append As #1
                Print #1, "pause"
                'Print #1, "Ma ligne DOS 2"
            Close #1
        'On sort de la boucle, et on lance le bat obtenu !
        '(On ne va pas le lancer à chaque tour de boucle hein !)
        ret = Shell("C:\rbcpy_line.bat", vbNormalFocus)
    End Sub
    code pour dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Private Sub copie_dossier_Click()
    '----------------------------------------------------------------------------------------------
    'Procédure qui lance un fichier .bat qui se trouverais sur le serveur
    'Elle écrit dans le fichier .bat et se fichier .bat lance robocopy
    'Avec les dossier source et destination en parametre.
    '----------------------------------------------------------------------------------------------
     
        'MsgBox "il y a " & CStr(GetSelectedItems(img_list)) & "  item(s) sélectionné(s)"
        Dim ret As Long
        Dim i As Integer
        Dim nb_ligne As Integer
        Dim destination As String
        Dim source As String
        nb_ligne = GetSelectedItems(img_list)
        'Pour chaque ligne de la list box on rajoute une ligne dans le .bat
        'les """ sont la pour faire en sorte que les dossiers avec plus de 6
        'caractères passent sans problemes ! a chaque tour de boucle on ouvre le
        'fichier, on rajoute la ligne, et on le ferme ect...
        'IL FAUT TROUVER COMMENT PASSER EN PARAMETRE LA VARIABLE SOURCE ET DESTINATION
        For i = 0 To nb_ligne
        '    source = """ + img_list.ItemData(i) + """
        '    destination = """ + dir2.Path + """
            source = GetItemText(i)
            destination = dir2.Path
            source = "" + source + ""
            destination = "" + destination + ""
            Open "C:\rbcpy_line.bat" For Append As #1
                Print #1, "robocopy " & source, destination & " /SEC"
                'Print #1, destination, source
                'Print #1, "Ma ligne DOS 2"
            Close #1
        Next
            Open "C:\rbcpy_line.bat" For Append As #1
                Print #1, "pause"
                'Print #1, "Ma ligne DOS 2"
            Close #1
        'On sort de la boucle, et on lance le bat obtenu !
        '(On ne va pas le lancer à chaque tour de boucle hein !)
        ret = Shell("C:\rbcpy_line.bat", vbNormalFocus)
    End Sub
    Je vous remercie de votre aide, comme je débute en VB 6.0 ... J'ai un peu de mal parfois ^-^' (Les aides sur les forums sont souvent en VB.net...

  6. #6
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Le code de tes 2 procedures etant tres proche, tu peux ecire une seule sub que tu appelles depuis tes 2 boutons (je suppose que ce sont des boutons de commande ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub Cmdcopie_fichier_Click()
    '----------------------------------------------------------------------------------------------
    'Procédure qui lance un fichier .bat qui se trouverais sur le serveur
    'Elle écrit dans le fichier .bat et se fichier .bat lance robocopy
    'Avec les dossier source et destination en parametre.
    '----------------------------------------------------------------------------------------------
    Copie 0
    End Sub
     
    Private Sub CmdCopie_dossier_Click()
    '----------------------------------------------------------------------------------------------
    'Procédure qui lance un fichier .bat qui se trouverais sur le serveur
    'Elle écrit dans le fichier .bat et se fichier .bat lance robocopy
    'Avec les dossier source et destination en parametre.
    '----------------------------------------------------------------------------------------------
    Copie 1
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Public Sub Copie(TypeCopie as byte)
    '----------------------------------------------------------------------------------------------
    'Procédure qui lance un fichier .bat qui se trouverais sur le serveur
    'Elle écrit dans le fichier .bat et se fichier .bat lance robocopy
    'Avec les dossier source et destination en parametre.
    '----------------------------------------------------------------------------------------------
     
        Dim ret As Long
        Dim i As Integer
        Dim nb_ligne As Integer
        Dim destination As String
        Dim source As String
        Dim Nf as byte
     
        Nf  = FreeFile
        nb_ligne = GetSelectedItems(img_list)
        'Pour chaque ligne de la list box on rajoute une ligne dans le .bat
        'les """ sont la pour faire en sorte que les dossiers avec plus de 6
        'caractères passent sans problemes ! a chaque tour de boucle on ouvre le
        'fichier, on rajoute la ligne, et on le ferme ect...
        'IL FAUT TROUVER COMMENT PASSER EN PARAMETRE LA VARIABLE SOURCE ET DESTINATION
        For i = 0 To nb_ligne
          source = GetItemText(i)
          If TypeCopie = 0 then
            'Copie de fichier
            fichier = Nomfichier(source)
            source = dir1.Path
          End If
          destination = dir2.Path
          Open "C:\rbcpy_line.bat" For Append As #Nf
          If TypeCopie = 0 then
            'Copie de fichier
            Print #1, "robocopy " & source, destination, fichier & " /SEC"
          Else
            'Copie de repertoire
            Print #Nf, "robocopy " & source, destination & " /SEC"
          End If
          Close #Nf
        Next
        Open "C:\rbcpy_line.bat" For Append As #1
        Print #Nf, "pause"
        Close #Nf
        'On sort de la boucle, et on lance le bat obtenu !
        '(On ne va pas le lancer à chaque tour de boucle hein !)
        ret = Shell("C:\rbcpy_line.bat", vbNormalFocus)
    End Sub
    Je ne vois pas trop l'interet des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    source = "" & source & ""
    je les ai donc sucre, mais comme je n'ai pas VB sur cette machine je n'ai pas teste mon code.
    J'ai egalement renomme tes boutons de commande (si ce sont bien des boutons de commande). Mettre des prefixes explicites sur le nom des controles aide beaucoup a la relecture d'un code. (Le standard des prefixes propose par Microsoft)

    Pour les recherches sur Google, tapes par exemple :

    mot_recherche VB6 -Net
    Ca n'elimine pas tout mais ca filtre deja pas mal les pages dedies a VB.Net plutot qu'a VB6

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut
    Hmm d'accords pour les intitulés je ferais plus attention a l'avenirs, je commente déjà beaucoup pour que mon code sois un minimum compréhensible ^^"

    Sinon pour les ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    source = "" & source & ""
    C'était quand je commencais a écrire la procédure, je voulais rajouter des guillemets au début et a la fin de ma ligne, car j'avais peur que robocopy ne me prenne pas les chemin qui contennait des nom de dossier de plus de 6 caracteres

    En résumé, je pensais que c'était soit :
    - "S:\Stage\Application_MPaille\Progs"
    ou
    - S:\Stage\Applic~1\Progs

    J'ai une question :
    Quelle différence entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Print #1, "robocopy" ...ect
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Print #Nf, "robocopy"...ect
    ?

  8. #8
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    L'instruction FreeFile permet de trouver un "numero de fichier" disponible a coup sur.
    Si par malheur tu as 2 process qui ouvrent chacun un fichier different avec le numero 1, tu vas avoir un beau plantage "fichier deja ouvert"

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut
    Je te remercie

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut
    Je reviens a la charge ! Il ne prends pas les fichiers qui contiennent un espace (Bah oui, c'est lancé en dos !)
    Il faut donc mettre le texte des variable entre guillemets ...
    Seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            source = """ & source & """
            destination = """ & destination & """
            fichier = """ & fichier & """
    ça ne lui plait pas du tout a VB 6.0 ...
    Mon petit doigt me dit qu'il y'a une astuce avec le code AscII.


    Edit :

    Si ça peut servir a quelqu'un,
    solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            source = Chr(34) & source & Chr(34)
            destination = Chr(34) & destination & Chr(34)
            fichier = Chr(34) & fichier & Chr(34)

  11. #11
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Tant mieux si tu as resolu ton probleme, mais pourquoi faire ca via un batch et ne pas utiliser les instructions Copy ou FileCopy de VB6 ?

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Par défaut
    Pour le batch, c'est mon maitre de stage qui m'a demandé de faire ainsi \o/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. EXCEL: Intégration fichiers avec structure variable
    Par Manuelito93 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 22/02/2009, 22h47
  2. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45
  3. Pb intégration de variables
    Par snoop94 dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2005, 11h41
  4. Récupérer contenu de fichier dans une variable
    Par peppena dans le forum Linux
    Réponses: 4
    Dernier message: 15/06/2005, 12h50
  5. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo