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 25/06/2011, 12h15   #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 Traitement d'un listbox

Bonjour,

J'utilise le code ci-dessous pour parcourir un listbox pour déplacer mes fichiers d'un dossier vers un autre.

Ce listbox se trouve dans un autre formulaire et est alimenté par "drag/drop".

Le traitement se fait "un fichier à la fois".

Je permets à l'utilisateur, une fois le traitement d'un fichier réalisé, de modifier diverses informations relatives à la destination du fichier suivant à déplacer.

C'est sur ce point que je bute.

J'ai, en fait, un décalage ...

C'est-à-dire que lorsque mon lisbox devient vide ... j'ai toujours la demande de modification qui apparaît ... cela ne fait pas très abouti ...

Et pour le premier fichier à traiter, lorsque je rempli les champs ... on me demande si je veux les modifier ...

Bref, ce n'est pas catastrophique mais cela fait moyennement sérieux ...

Je pense qu'il doit y avoir un "do while ... loop" à mettre quelque part mais je ne sais pas où ... Si quelqu'un avait une idée ... je lui en serai reconnaissant ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim oFSO As Scripting.FileSystemObject
Dim FileExt As String
    For i = 0 To Forms!frmdragdrop!lstdrop.ListCount - 1
        Msg = Forms!frmdragdrop!lstdrop.Column(0, i)
        'procédure pour récupérer l'extension sansle point
        Dim intI As Integer
        intI = InStrRev(Msg, ".", -1, vbTextCompare)
        FileExt = IIf(intI = 0, "", Mid(Msg, intI + 1))
        ' on vérifie si le fichier existe déjà dans la destination
        ' si oui, on arrête
        If Dir(Forms!Menu!Texte88 & "\" & Texte7 & " " & Texte0 & " vs " & Texte2 & "\" & Texte7 & " " & Modifiable5.Column(1) & "\" & Format(Date, "yyyymmdd") & " " & Texte7 & " " & Me.Texte180 & i & "." & FileExt) <> "" Then
        MsgBox Format(Date, "yyyymmdd") & " " & Texte7 & " " & Me.Texte180 & i & "." & FileExt & " existe déjà. Le fichier à déplacer se trouvant à cet emplacement " & vbCrLf & " " & Forms!frmdragdrop!lstdrop.Column(0, i) & vbCrLf & " ne sera pas déplacé."
        'si non, on continue
        Else
        Set oFSO = New Scripting.FileSystemObject
        oFSO.MoveFile Msg, Forms!Menu!Texte88 & "\" & Texte7 & " " & Texte0 & " vs " & Texte2 & "\" & Texte7 & " " & Modifiable5.Column(1) & "\" & Format(Date, "yyyymmdd") & " " & Texte7 & " " & Me.Texte180 & i & "." & FileExt
        Forms!frmdragdrop!lstdrop.RemoveItem i
        'Forms!frmdragdrop!lstdrop.listitems.Remove i
        End If
            If MsgBox("Voulez-vous modifier les données présentes dans ce formulaire pour le traitement à venir ? ", vbYesNo) = vbYes Then Exit Sub
        Next
MsgBox "Le traitement a eu lieu. Vérfiez si des fichiers subsistent dans le précédent formulaire."
err:
emulamateur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 16h33   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour emulamateur,

Je pense qu'il faudrait que tu utilises un autre indice logique qui se décrémenterait lorsque que tu effectues ton .RemoveItem.
et juste avant on instruction
Code :
If MsgBox("Voulez-vous modifier les données présentes dans ce formulaire pour le traitement à venir ? ", vbYesNo) = vbYes Then Exit Sub
tu testes comme ceci
Code :
if <i_autre> = 0 then exit sub
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h21   #3
Membre régulier
 
Inscription : mars 2008
Messages : 210
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 210
Points : 70
Points : 70
Bonjour,

Si je conserve mon opérateur logique, je peux éventuellement écrire un truc du type :

Code :
if i = Forms!frmdragdrop!lstdrop.ListCount - 1 then exit sub
cela devrait fonctionner ... je vais tester ...
emulamateur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h43   #4
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Attention, je ne suis pas sur que le .ListCount soit recalculé au fur et à mesure.

Pense bien à faire un .requery pour remettre à jour les compteurs de la listbox
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 18h52   #5
Membre régulier
 
Inscription : mars 2008
Messages : 210
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 210
Points : 70
Points : 70
effectivement ... il y a besoin d'un requery ou d'un removeitem ... ce qui alourdit le code.

Je vais regarder la piste de l'autre opérateur logique
emulamateur 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 02h48.


 
 
 
 
Partenaires

Hébergement Web