Besoin AIDE pour listbox en VB ??

Bonjour,

donc voila sa fait 3 jours que je suis dessus , j'arrive pas a trouver
je suis sur visual basic 2008

Enfaite j'ai un bouton parcourir , et tout les fichiers que je parcours se mettent dans une listbox .
et ces fichiers je dois les envoyer sur d'autres pc en local
et dans ma fonction FileCopy , il faut donc que je fasse varier mon chemin source selon le fichier a envoyer
mon maitre de stage veut que tout les fichiers s'envoient en 1 fois donc il faut que je fasse une boucle qui me permet de mettre le chemin du 1e fichier de la liste en chemin source et l'envoyer , le 2e .. etc etc
mais je sais vraiment pas , je suis bloquer

Merci

6 réponses

Résumé de la discussion

Un développeur demande comment envoyer en une seule fois les fichiers sélectionnés via un bouton Parcourir alimentant une ListBox dans Visual Basic 2008, et comment faire varier le chemin source pour chaque fichier. Plusieurs approches proposent d'utiliser une boucle For Each sur ListBox1.Items et File.Copy vers un répertoire distant, avec gestion des exceptions et vérification des chemins pour copier chaque fichier. Plusieurs variantes apparaissent, notamment l’extraction des chemins depuis ListBox1, l’itération sur ListCount, ou la copie synchrone dans un bloc try/catch, tout en préservant le nom et l’extension. En cas de besoin, les échanges suggèrent d’adapter le code pour VB6/VB.NET et d’alléger le passage d’un seul fichier à l’envoi simultané, sans conclure sur une solution définitive.

Bobot (l’IA à votre service)
  1. Bonjour,

    Il parait logique qu'il faut faire une boucle qui envoi les fichiers un par un jusqu'au dernier. La boucle doit se faire sur les éléments de la liste ( = 0 to ListBox1.Items.Count -1).
    Si tu mets le code qui te permet de copier un seul fichier on pourra essayer ensemble de trouver une solution pour envoyer tous les fichiers au même temps.

    Salutations!
    0
    1. Voila mon code qui me permet de copier

      'chemin d'origine des fichiers
      Dim sourceDir As String = "C:\Documents and Settings\Mes documents\test"
      'chemin où sont copier les fichiers
      Dim backupDir As String = "\\Poste1\ia"

      Try

      Dim txtList As String() = Directory.GetFiles(sourceDir, "*.txt")

      For Each f As String In txtList
      Dim fName As String = f.Substring(sourceDir.Length + 1)
      Try
      File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))
      MsgBox("Votre fichier s'est correctement envoyé ! ")

      Catch copyError As IOException
      MessageBox.Show("Erreur pour la copie des fichiers ! " & copyError.Message)

      End Try
      Next

      Catch dirNotFound As DirectoryNotFoundException
      MessageBox.Show(" Erreur de copie ! " & dirNotFound.Message)
      End Try
      0
      1. Bonjour,

        Dans le code que tu utilises, on ne dispose que d'une seule information sur le dossier source. Or, les fichiers peuvent parvenir de plusieurs dossiers. Il est indispensable d'avoir une liste comportant tous les chemins des répertoires concernés.
        Il est possible dans ce cas d'utiliser une liste

        Dim sourceDirs as String() ' = Liste des chemins concernés
        For Each sourceDir as String In sourceDirs
           .... ' Le code que tu met pour un seul chemin (que tu as présenté ci-haut )
        Next
        

        Avec sourceDirs une liste que tu dois avoir informé au préalable.
        0
        1. Je ne sais pas si c'est possible à l'utilisateur de connaitre au préalable les chemins à copier au réseau local.
          0
        2. je comprend pas trop l'histoire de la liste des chemin concerné :/
          0
        3. je viens d'en parler avec mon maitre de stage et oui mes chemins sont connu d'avance
          0
        4. les fichiers quil faudra copier seront toujours au meme endroit
          0
      2. On peut écrire le code de cette manière :

        'chemin d'origine des fichiers
        Dim sourceDirS As String( [Nombre de chemins concernés] )
        'chemin où sont copier les fichiers
        Dim backupDir As String = "\\Poste1\ia"
        
        'information des chemins concernés
        sourceDirS(0) = "chemin1"
        sourceDirS(1) = "chemin2"
        ...
        sourceDirS( [Nombre de chemins concernés] -1) = "chemin [Nombre de chemins concernés]"
        
        Try
        
        For Each sourceDir As String In sourceDirs
        
            Try
        
            Dim txtList As String() = Directory.GetFiles(sourceDir, "*.txt")
        
            For Each f As String In txtList
                Dim fName As String = f.Substring(sourceDir.Length + 1)
                Try
                File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))
                MsgBox("Votre fichier s'est correctement envoyé ! ")
            
                Catch copyError As IOException
                MessageBox.Show("Erreur pour la copie des fichiers ! " & copyError.Message)
            
                End Try
        
            Next
            
            Catch dirNotFound As DirectoryNotFoundException
            MessageBox.Show(" Erreur de copie ! " & dirNotFound.Message)
            End Try
        
        End Try
        
        

        0
        1. et comment le programme saura que le 1e fichier de la liste correspond a tel ou tel chemin ??
          0
        2. Directory.GetFiles(sourceDir, "*.txt") remplit la liste avec tous les fichiers "*.txt" qui se trouvent dans le dossier indiqué.
          Le code qu'on a mis permet de copier tous les fichiers contenus dans la liste des répertoires.
          0
        3. Si on a envie de sélectionner un nombre restreint de fichier, il faut le préciser dans les conditions.
          Ce qui est possible de faire si on ne veut pas copier tous les fichiers, c'est de créer deux liste parallèles, une qui contient le nom du fichier, et l'autre le chemin où il se trouve.
          Tout dépend de la manière avec laquelle les fichiers sont 'parcourus'.
          0
        4. pk dans mon code il me dit que sourceDirS n'est pas declarer?
          0
        5. Pour qu'on encadre mieux la problématique, peux tu décrire clairement ce que tu veux que l'algorithme fasse. Répondre surtout aux questions suivantes :
          - Sur quel critère les fichiers sont-ils sélectionnés.
          - Comment ces fichiers sont-ils sélectionnés (pour savoir comment la liste des fichiers est remplie)
          0
      3. Suite à ta dernière réplique, je peux te proposer de travailler directement avec la liste que l'utilisateur remplit au fur et à mesure.
        Supposons que cette liste soit nommée ListBox1 :

        'chemin d'origine des fichiers
        Dim sourceList As String(ListBox1.ListCount)
        'En sachant que la ListBox1 contient tous les fichiers avec leur chemins complets
        
        'chemin où sont copier les fichiers
        Dim backupDir As String = "\\Poste1\ia"
        
        Try
        	' On copie le contenu de la ListBox dans un tableau
        	' On aurait pu travailler directement avec la ListBox, mais celà fait plus propre
        	dim i as integer
        	For i = 0 to ListBox1.ListCount - 1
        		sourceList(LBound(sourceList) + i) = ListBox1(i)
        	Next i
        End Try
        
        Try
        	For Each f As String In sourceDirs
        		'Dim fName As String = f.Substring(sourceDir.Length + 1)
        		Try
        			File.Copy(f, Path.Combine(backupDir, Path.GetFileName(f)))
        			MsgBox("Votre fichier s'est correctement envoyé ! ")
        
        		Catch copyError As IOException
        			MessageBox.Show("Erreur pour la copie des fichiers ! " & copyError.Message)
        
        		End Try
        	Next f
        
        	Catch dirNotFound As DirectoryNotFoundException
        	MessageBox.Show(" Erreur de copie ! " & dirNotFound.Message)
        	End Try
        End Try
        
        


        J'espère que j'ai bien compris ce qui est demandé!
        0
        1. Fais quand même attention à la syntaxe de quelques contrôles tels que la liste box car j'utilise une version de VB antérieure à celle que tu utilises.
          0
        2. oui tu a bien compris ce que je dois faire =)

          par contre j'ai mi le code dans mon prog mais il me souligne tjrs " sourceList" en me disant quil n'est pas déclaré .
          comment sa se fait ? alors qu'il ya bien " Dim sourceList As String(ListBox1.ListCount) "
          0
        3. bon j'ai resolu cette erreur

          cependant , j'en est d'autre :/

          sourceList(LBound(sourceList) + i) = LB_ListeFichier(i)
          il me souligne ce que je tes souligné et me dit comme erreur " une valeur de type string ne peut pas etre converti en system.array"
          0
        4. Cette syntaxe doit être relative aux version antérieures du VB.
          Ce que je voulais faire c'est copier l'objet ListBox dans la tableau sourceList()
          LBound(sourceList ) est sensée donner l'index de la toute première case (généralement égal à 0). Il faut trouver l'équivalent de LBound dans VB 9.
          0
        5. Dim sourceList As String(ListBox1.ListCount)
          sourceList est bien un tableau de String (de type String()) dont le nombre de cases est égale au nombre d'élément dans la ListBox1. Je ne vois pas pourquoi il la considère comme une String.
          0
      4. Voici une application écrite en VB qui répond à la problématique contenant :
        - Les fichiers du code
        - Un exécutable

        Pour télécharger
        0
        1. Tu dois trouver la présentation un peu vielle et barbare. Tel est le vieux VB6.
          Je ne pense pas que tu trouvera des difficultés à comprendre le code, il est simple. Il faut tout simplement trouver son équivalent en .net
          0
        2. salut
          je suis en train de regarder ce que tu ma passer
          c'est assez compliquer quand meme , surtout que je ne connais pas le moindre truc en vb6 Lol
          0
        3. J'ai trouvé une conversation concernant la transformation du code vb en vb.net
          0
        4. ué j'avais vu sa sur le forum
          mais jvois pas comment l'ouvrir en Vb.net comme ils disent

          si je comprend la ce que tu ma envoyé le form1 je les ouvert avec visual basic 2008
          donc la c'est bon c'est converti alors ?
          0
        5. S'il a eu la gentillesse de bien vouloir s'exécuter en l'ouvrant avec vb.net alors il a bien été converti. En fait, les syntaxes des deux langages n'est pas éloignée. Il est possible, si on comprends un, de comprendre l'autre.
          0