Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
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 03/12/2011, 18h20   #1
Invité régulier
 
Inscription : décembre 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 35
Points : 8
Points : 8
Par défaut Sélection dans une ListView

Bonjour à tous,

Une nouvelle fois je fais appel à vous car j'ai une difficulté que je ne parviens pas à comprendre.

Je travaille avec Excel 2007 sous Windows 7.

J'ai crée un UserForm dans lequel j'ai placé (entre autre) 3 ListView qui sont alimentées par des données placées sur 3 feuilles de mon classeur.
Je remplis mes ListView sans problème.
Le but est de cliquer sur un CommandButton et qu'à ce moment, un fichier Excel s'ouvre. Le nom de ce fichier étant donné par l'Item sélectionné dans l'une des ListView.
Tout cela fonctionne correctement. J'ai même placé la Multiselection à "True" pour sélectionner plusieurs fichiers en même temps.

MAIS, voici mon problème.
Si je sélectionne un Item "Fichier1" sur la ListView1, puis, changeant d'avis, je sélectionne un Item "Fichier24" sur la ListView2, le clic sur le commandButton m'ouvre le fichier "Fichier24" (c'est ce que je demande) mais il m'ouvre aussi le fichier "Fichier1" de la ListView1 alors que celui-ci n'est plus sélectionné !

Ou est mon erreur ? Pouvez-vous m'aider ?

Voici le code pour l'initialisation de mon UserForm

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub UserForm_Initialize()
 
ListView1.Gridlines = True
Me.ListView1.CheckBoxes = True
ListView1.MultiSelect = True
 
    With ListView1
         With .ColumnHeaders
             .Clear          
            .Add , , "Nom Facture", 130
            .Add , , "Montant", 40, lvwColumnCenter
            .Add , , "Relance Mail", 60, lvwColumnCenter
            .Add , , "Relance Courrier", 70, lvwColumnCenter
        End With
 
        Sheets("Items ListView1").Select
 
       '.................. Remplissage de la ListView1------------------
       '--------------Même démarche pour remplir les 2 autres ListView ------
Voici maintenant le code lié à mon CommanButton

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
31
32
33
34
35
36
37
38
39
40
41
Private Sub CommandButton1_Click()
 
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim Fichier_à_ouvrir As String
Dim Chemin As String
 
For i = 1 To ListView1.ListItems.Count
 
    If ListView1.ListItems(i).Selected = True Then
 
    Fichier_à_ouvrir = ListView1.ListItems(i).Text
    Chemin = "D:\Dir1\Dir2\Dir3\Dir4\Dir5\" & Fichier_à_ouvrir & ".xls"
    Workbooks.Open Filename:=Chemin
 
    End If
Next
 
For j = 1 To ListView2.ListItems.Count
 
    If ListView2.ListItems(j).Selected = True Then
 
    Fichier_à_ouvrir = ListView2.ListItems(j).Text
    Chemin = "E:\Dir1\Dir2\Dir3\Dir4\Dir5\" & Fichier_à_ouvrir & ".xls"
    Workbooks.Open Filename:=Chemin
 
    End If
Next
 
For k = 1 To ListView3.ListItems.Count
 
    If ListView3.ListItems(k).Selected = True Then
    Fichier_à_ouvrir = ListView3.ListItems(k).Text
    Chemin = "E:\Dir1\Dir2\Dir3\Dir4\Dir5\" & Fichier_à_ouvrir & ".xls"
    Workbooks.Open Filename:=Chemin
 
    End If
Next
 
End Sub
Une dernière question. Je m'étais dit qu'il serait interessant de placer des CheckBoxes devant les Items et ainsi de les cocher pour sélectionner les Items ... Je ne parviens pas à trouver les "bonnes" lignes de code (C'est un peu pour cela que je me suis rabattu sur la séléction multiple).
Si vous avez des pistes à me proposer, je suis preneur.

Bonne soirée et bon weekend.

danad38
Danad38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 18h23   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonsoir,
Ce n'est pas dans l'initialisation que se trouve l'erreur mais dans le code de sélection des items.
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 18h34   #3
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
SAlut
Il faudrait effectivement voir le reste du code, mais je ne trouve pas ça choquant. Tu as deux listes qui sont indépendantes, donc le fait de sélectionner un item sur l'une ne supprime pas la sélection sur l'autre, c'est juste qu'étant donné que ton 1er liste perd le focus, tu ne vois plus l'item qui est sélectionné, mais il y en a bien un.
Que veux tu faire exactement? si tu sélectionnes une entrée sur la Liste2 il faut annuler les sélections faites sur la Liste1?
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 18h42   #4
Invité régulier
 
Inscription : décembre 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 35
Points : 8
Points : 8
Par défaut Sélection dans une ListView

Bonjour Qwazerty,

En effet tu poses la bonne question, je n'ai pas été assez précis.

Lorsque je me trouve devant mon formulaire et ces 3 ListView, il peut arriver que je sélectionne un Item dans une ListView, mais que je constate que j'ai fait une erreur (avant d'exécuter le CommandButton). Je sélectionne alors un (ou plusieurs) autres Items dans une autre liste. Je souhaite donc annuler ma précedente sélection.
Je précise par ailleurs que dans "presque" tous les cas, il ne peut pas y avoir des sélections dans plusieurs ListView en même temps (même si ce principe pourrait, quequefois, être interessant.

Merci.

Danad38
Danad38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 19h38   #5
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Dans ce cas, ajoute un bouton "Reset" et dans le code du bouton tu reproduis ce code pour chacune des listbox

Code :
1
2
ListBox1.MultiSelect = False
ListBox1.MultiSelect = True
Ça aura pour effet de supprimer les items sélectionnes
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 19h35   #6
Invité régulier
 
Inscription : décembre 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 35
Points : 8
Points : 8
Par défaut Sélection dans une ListView

Bonsoir Qwazerty,

Excuse moi pour ce retard.
Merci pour ta proposition même si elle ne me satisfait pas vraiment sur le principe de son fonctionnement. En effet, si je dois sélectionner 5 ou 6 Items dans une ListView, la moindre erreur de "clic" m'amène à faire un Reset sur tous les Items déjà sélectionnés. Est-ce plus pratique en fin de compte que d'ouvrir un fichier supplémentaire (Les Items sont des noms de fichiers qui doivent s'ouvrir) ...
Dans tous les cas, merci pour t'être penché sur mon problème.

Si tu en as le temps, je précisais dans mon premier message que j'avais placé des CheckBoxes sur mes Items. Il me semblait plus simple, au départ, de cocher les Items plutôt que de faire une multisélection, je ne suis pas parvenu à écrire un "bout de code" efficace ... As-tu une idée ?

Merci et bonne soirée.

Danad38
Danad38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 20h01   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Je n'avais pas compris, tu as la possibilité d'utiliser fmMultiSelectExtended au lieu de fmMultiSelect pour la propriété MultiSelect de tes listes, ainsi en utilisant Shift ou Ctrl tu peux faire varier la sélection au coeur de ta liste.

Il doit également être possible en laissant fmMultiSelect de de-sélectionner l'item s'il est déjà selected au moment du click souris.
Mais regarde dans un 1er temps fmMultiSelectExtended.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 12h05   #8
Invité régulier
 
Inscription : décembre 2010
Messages : 35
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 35
Points : 8
Points : 8
Par défaut Sélection dans une ListView

Salut Qwazerty,

C'est bon !
Il est bon de réussir à avancer un peu.
Merci pour ta proposition, elle me convient parfaitement.
Grace à la touche Ctrl, je peux sélectionner ou déselectionner sans problème. Seuls les Items surlignés amènent l'ouverture des fichiers correspondants.

Une petite remarque pour terminer. Si je clique sur plusieurs Items de listes différentes (en gardant enfoncée la touche Ctrl) seuls les Items de la derniere ListView utilisée sont surlignés mais les Items cliqués dans les autres listes provoquent l'ouverture des fichiers correspondants (alors que le fait de changer de ListView, annule visuellement la sélection de la ListView précedente) ...

Je n'ai pas d'explication mais ce n'est pas bien important.
Je considère le problème résolu.

Merci encore.

Danad38
Danad38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 18h48   #9
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Citation:
Envoyé par Qwazerty Voir le message
SAlut
Il faudrait effectivement voir le reste du code, mais je ne trouve pas ça choquant. Tu as deux listes qui sont indépendantes, donc le fait de sélectionner un item sur l'une ne supprime pas la sélection sur l'autre, c'est juste qu'étant donné que ton 1er liste perd le focus, tu ne vois plus l'item qui est sélectionné, mais il y en a bien un.
Salut
C'est ce que je t'expliquais ici, lorsqu'une liste à le focus,c'est a dire que c'est elle qui reçois les frappes clavier par exemple (elle est active en somme), elle colore ses item qui ont la propriété selected à true. Ma uniquement quand elle a le focus, si elle perd le focus (lorsque tu cliques ailleurs, sur un autre élément) elle ne les colore plus, mais il ne perdent pas pour autant leur statut Selected.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h05.


 
 
 
 
Partenaires

Hébergement Web