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

VBA Access Discussion :

Parcourir une liste pour transférer des fichiers


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut Parcourir une liste pour transférer des fichiers
    Bonjour,

    Le code est certainement à améliorer mais j'utilise celui-ci pour parcourir une sélection de fichiers dans une liste afin de les transférer du répertoire A vers le répertoire B.

    Le pb c'est que le code ne fonctionne pas lorsque je ne sélectionne qu'un fichier et si j'en sélectionne plusieurs, il ne transfère jamais le premier ....

    En fait, si j'en sélectionne 3 ma valeur ubound(y) est de 2, si j'en sélectionne 1, elle est à 0.

    Ce qui est encore plus bizarre c'est que le msgbox de "contrôle" parcourt bien les 3 fichiers sélectionnés et leur nouvel emplacement ...



    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
     Dim I As Integer
    Dim A As Integer
    Dim w As String
    Dim x As String
    Dim y() As String
    Dim z As String
    For I = 0 To Me.Liste8.ListCount
    If Me.Liste8.Selected(I) Then x = x & "" & Me.Liste8.Column(2, I) & ";"
     Next I
    y = Split(Left(x, Len(x) - 1), ";") '
    For A = 0 To UBound(y)
     'y(A) chemin complet du fichier à transférer sans les guillemets
    Dim intI As Integer
      intI = InStrRev(Chr(34) & y(A) & Chr(34), "\", -1, vbTextCompare)
    z = IIf(intI = 0, Chr(34) & y(A) & Chr(34), Mid(Chr(34) & y(A) & Chr(34), intI + 1))
    z = Left(z, Len(z) - 1) 'nom du fichier seul
    Dim m As Variant
    Dim oFSO As Scripting.FileSystemObject
    Me.WebBrowser4.Object.Navigate "C:\Documents and Settings\max\Mes documents\doc1.pdf"
    Set oFSO = New Scripting.FileSystemObject
     
    oFSO.MoveFile y(A), Me.Texte15 & "" & Format(Date, "yyyymmdd") & " " & Me.Modifiable175.Column(0) & " " & z
     
    msgbox y(A) &" vers "&  Me.Texte15 & "" & Format(Date, "yyyymmdd") & " " & Me.Modifiable175.Column(0) & " " & z 'msgbox de contrôle
     
    Next A
    err:
     
    msgbox err.number &" "& err.description
    Si je change le code en mettant :

    J'ai le bon nombre d'item sélectionnés (valeur ubound(y)) mais j'ai une erreur 5 et aucun traitement ne se fait ....

    Je sèche ...

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    La première chose à faire est de rendre ton code lisible :
    1. Pour toi même
    2. Et pour les autres (nous en l'occurence)
    Le mode goret est révolu...

    Enlèves d'abord toutes les variables inutiles
    Puis, nomme tes contrôles et tes variables correctement...

    Dans ta boucle, tu instancies un FSO à chaque fois qu'un élément de la liste est sélectionné... Bon, cette instruction, tu la déplaces en début de code.

    Et pourquoi faire un tableau ? Tu te complique la vie.
    Dans ton If/End If tu peux tout exécuter en une fois.

    Quand tout ça sera corrigé, tu trouveras par toi même le pourquoi de ton erreur.

    Argy

    P.S. Un lsitbox commence à l'indice 0 donc la propriété ListCount doit être otée de 1.
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Est-ce plus clair ?

    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
     Dim I As Integer
    Dim intI As Integer
    Dim A As Integer
     Dim x As String
    Dim y() As String
    Dim z As String
    ' parcourir la liste pour trouver ce qui est sélectionné
    For I = 0 To Me.Liste8.ListCount 
    ' créer une lite des fichiers à transférer, séparés par ;
    If Me.Liste8.Selected(I) Then x = x & "" & Me.Liste8.Column(2, I) & ";"
     Next I
    ' créer un tableau que l'on va parcourir
    y = Split(Left(x, Len(x) - 1), ";") '
    ' parcourir le tableau
    For A = 0 To UBound(y)
     'y(A) chemin complet du fichier à transférer sans les guillemets
    ' recherche du nom du fichier 
      intI = InStrRev(Chr(34) & y(A) & Chr(34), "\", -1, vbTextCompare)
    z = IIf(intI = 0, Chr(34) & y(A) & Chr(34), Mid(Chr(34) & y(A) & Chr(34), intI + 1))
    z = Left(z, Len(z) - 1) 'nom du fichier seul
    ' transfert des fichiers
    Dim oFSO As Scripting.FileSystemObject
    Set oFSO = New Scripting.FileSystemObject
    ' détermination du départ et de l'arrivée
    oFSO.MoveFile y(A), Me.Texte15 & "" & Format(Date, "yyyymmdd") & " " & Me.Modifiable175.Column(0) & " " & z
    'on passe à la ligne suivante du tableau
    Next A
    err:
     
    msgbox err.number &" "& err.description

  4. #4
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Est-ce que ce ne serait pas plus simple avec un truc du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim oFSO As Scripting.FileSystemObject
    Set oFSO = New Scripting.FileSystemObject
    For i = 0 To Liste8.ListCount - 1
    If Liste8.Selected(i) = true Then oFSO.MoveFile départ, arrivée
     Next i

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Est-ce plus clair ?
    Nettoyer un code signifie nommer les contrôles et les variables...

    C'est vrai que quand on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Texte75 = Modifiable17 And Texte42 > Texte74 Then
        If Cocher14 = True  And A = 1 Then
            T = 3
            Command33.Enabled = False
            Texte43.Value = ""
        End If
    End If
    On comprend tout de suite de quoi il s'agit n'est-ce pas ?
    C'est limpide, on a pas beoisn d'aller dans le formulaire pour savoir de quoi il s'agit etc...

    Je pense que j'ai répondu à ta question...
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

Discussions similaires

  1. Une bibliothèque pour lire des fichiers zip
    Par coyotte507 dans le forum C++
    Réponses: 5
    Dernier message: 13/10/2009, 16h32
  2. Réponses: 5
    Dernier message: 12/02/2009, 09h27
  3. [socket C/C++] Pb pour transférer des fichiers volumineux
    Par mickael777 dans le forum Windows
    Réponses: 1
    Dernier message: 04/05/2008, 21h11
  4. Réponses: 2
    Dernier message: 14/09/2006, 15h22
  5. Réponses: 1
    Dernier message: 10/09/2006, 16h09

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