Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2011, 11h49   #1
Membre régulier
 
Inscription : mars 2008
Messages : 210
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 210
Points : 70
Points : 70
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 :
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 ...
emulamateur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 13h43   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 655
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 655
Points : 6 220
Points : 6 220
Envoyer un message via MSN à argyronet
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.
__________________
Ils comptent sur vous...

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.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 20h26   #3
Membre régulier
 
Inscription : mars 2008
Messages : 210
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 210
Points : 70
Points : 70
Est-ce plus clair ?

Code :
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
emulamateur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 20h30   #4
Membre régulier
 
Inscription : mars 2008
Messages : 210
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 210
Points : 70
Points : 70
Est-ce que ce ne serait pas plus simple avec un truc du type :

Code :
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
emulamateur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 14h31   #5
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 655
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 655
Points : 6 220
Points : 6 220
Envoyer un message via MSN à argyronet
Citation:
Est-ce plus clair ?
Nettoyer un code signifie nommer les contrôles et les variables...

C'est vrai que quand on écrit :
Code :
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...
__________________
Ils comptent sur vous...

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.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h16.


 
 
 
 
Partenaires

Hébergement Web