91ced
Messages postés20Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention 5 juillet 2006
-
27 juin 2006 à 14:22
91ced
Messages postés20Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention 5 juillet 2006
-
28 juin 2006 à 11:24
Hello,
comment empêcher les doublons dans une Listbox...?
Mon code actuel est :
Private Sub selection_Click()
Dim files
Dim i As Byte
files = Application.GetOpenFilename(, , "Sélectionner les fichiers à " _
& "imprimer", , True)
If VarType(files) = vbBoolean Then
GoTo fin
Else
GoTo suite
End If
suite:
For i = 1 To UBound(files)
ListBox1.AddItem (files(i)) 'Remplissage Listbox
Next
fin:
End Sub
Si qqu'un peut m'ajouter ce qu'il faut pour empêcher les doublons ce serait génial !!!!
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 27 juin 2006 à 16:53
Oui,
Dans ce cas il suffit de déclarer ton dictionnaire dans le UserForm et non dans la routine.
(Je suppose que tu es en VBA Excel et non en VB6)
Donc il suffit de faire
Private Elements As New Dictionary
....Code
Private Sub selection_Click()
Dim files
Dim i As Byte
files = Application.GetOpenFilename(, , "Sélectionner les fichiers à " _
& "imprimer", , True)
If VarType (files) = vbBoolean Then
GoTo fin
Else
GoTo suite
End If
suite:
For i = 1 To UBound(files)
If Not Elements.Exists(files(i)) Then
Call ListBox1.AddItem(files(i)) 'Remplissage Listbox
Call Elements.Add(files(i), files(i)) 'memorisation de l'elements dans le dictionnaire
End If
Next
fin:
End Sub
domsig
Messages postés125Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention11 mai 2010 27 juin 2006 à 14:32
salut
avant de faire ton listbox1.additem je pense qu'il faut parcourir tout ton listbox1, et regarder si chaque ligne lue est égale à ce que tu veux ajouter. A la première ligne égale, tu sors de la boucle, sinon à la fin de la boucle tu fais ton additem...
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 27 juin 2006 à 14:54
Salut,
Ou alors avant de remplir ton listbox tu passe par un Dictionnaire.
Pour ce faire ajoute la référence Microsoft Sripting Runtime a ton projet pour pouvoir etre en mesure d'utiliser cet objet.
Et ensuite tu adapte ton code de la manière suivante.
Private Sub selection_Click()
Dim files
Dim i As Byte
Dim Elements As New Dictionary
files = Application.GetOpenFilename(, , "Sélectionner les fichiers à " _
& "imprimer", , True)
If VarType (files) = vbBoolean Then
GoTo fin
Else
GoTo suite
End If
suite:
For i = 1 To UBound(files)
If Not Elements.Exists(files(i)) Then
Call ListBox1.AddItem(files(i)) 'Remplissage Listbox
Call Elements.Add(files(i), files(i)) 'memorisation de l'elements dans le dictionnaire
End If
Next
fin:
End Sub
91ced
Messages postés20Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention 5 juillet 2006 27 juin 2006 à 15:35
Merci Julien,
Je pense privilégier ta solution, qui me semble rapide et efficace.
Par contre j'ai un message d'erreur :
Erreur de compilation
Type défini par l'utilisateur non défini
concernant apparement Dim Elements As New Dictionary
et ma macro, comme modifié selon tes indications :
Private Sub selection_Click()
'---------------Sélection des fichiers-----------------
Dim files
Dim i As Byte
Dim compt As Byte
Dim Elements As New Dictionary
files = Application.GetOpenFilename(, , "Sélectionner les fichiers à " _
& "imprimer", , True)
If VarType(files) = vbBoolean Then
GoTo fin
Else
GoTo suite
End If
suite:
For i = 1 To UBound(files)
If Not Elements.Exists(files(i)) Then
Call ListBox1.AddItem(files(i)) 'Remplissage Listbox
Call Elements.Add(files(i), files(i)) 'Memorisation element dans le dictionnaire
End If
Next
For compt = 0 To ListBox1.ListCount - 1
Worksheets("Liste").Cells(compt + 1, 1) = ListBox1.List(compt) 'Remplissage excel
Next
fin:
End Sub
Merci pour ton aide précieuse, je tourne en rond moi....
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 27 juin 2006 à 16:24
Salut,
J dois être bête mais je vois pas ou cela coince. IL ne peux pas y avoir de doublons si tu selectionnes des fichiers, vu que deux fichiers ne peuvent pas s'appeler pareil.
Si tu entends par doublons le fait de d'appuyer deux fois sur le bouton et de selectionner deux fois les meme fichiers.
alors il suffisait d'ajouter a ton code de départ
Call ListBox1.Clear juste au debut de ta routine.
Si ce n est pas ca il faut expliquer de nouveau car je ne vois pas ou est le problème.
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
Mais Surtout: Règlement/FONT>
91ced
Messages postés20Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention 5 juillet 2006 27 juin 2006 à 16:37
En fait, ce que je souhaite, c'est que lorsque l'utilisateur appuie à nouveau sur le bouton de sélection, s'il a oublié des fichiers ou pour x raisons, qu'il ne puisse pas re-sélectionner un fichier qui est déjà dans la liste (par mégarde ou exprès).
Je ne pense pas que listbox1.clear soit la solution, ça va me réinitialiser ma liste, non ?
91ced
Messages postés20Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention 5 juillet 2006 28 juin 2006 à 08:54
Merci Julien ça marche.
Oui je suis sous VBA Excel, je n'ai peut-être pas bien choisi la rubrique. Vu que la version de VBA est la 6.0 sur ma machine, j'ai confondu avec VB6...
Sinon dernière chose : le fait d'avoir cocher Microsoft Scripting Runtime sur mon poste impose t-il que chaque utilisateur qui utilisera ma macro devra faire de même ????
Ou y a t-il moyen de faire autrement ?
91ced
Messages postés20Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention 5 juillet 2006 28 juin 2006 à 08:57
Merci Mortalino.
Mais pour le moment je préfère garder ma soluce : Je débute en VBA, alors je ne suis pas peu fier d'avoir déjà réussi à pondre ce bout de code !!!!
Mais je te remercie et je vais regarder ta soluce de près ce matin.
Histoire de voir comment j'aurais pu également faire, et d'apprendre de nouvelles choses.
91ced
Messages postés20Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention 5 juillet 2006 28 juin 2006 à 10:50
Houps autant pour moi ça fonctionne.
Excuse.
Merci énormément pour ton aide.
J'aurais encore besoin d'aide sur un point : si le but est de pouvoir ensuite d'afficher ou imprimer les documents, ça ne fonctionne pas avec des fichiers excel !!! Word, PDF, XML, etc....pas de problème mais XLS non.
Je fait un nouveau post pour ça
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 28 juin 2006 à 11:02
Alors je sais pas j ai jamais fait d'impression automatique.
En revanche ce que je peux te conseiller c'est d'utiliser l'enregistreur de macro fourni avec Excel. Ainsi tu verras la suite de commande qu'effectue excel pour imprimer.
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
Mais Surtout: Règlement/FONT>