Trier des listes (Validation) sans doublons..

Le
Emile63
Bonjour a tous,
Je peine un peu avec les procédures ci-après (qui ne fonctionne pas).
J'ai une (petite) base de données avec des voitures triées par,
marques, modèles, couleur, matriculation.
Et je souhaite (sans bouton de commande, ou boîte de dialogue),
pouvoir trier mes données "sans doublons" afin de succèssivement,
quand je clic sur une cellule donnée - dans ma feuille de calcul- que
la liste qui surgit de
Données -> Validation soit, sans doublons. La finalité (mais j'en suis
encore loin) étant de dérouler les marques disponibles, puis dans une
autre cellule, les modèles (de la marque choisie), puis les couleurs
(du modèle et marque choisis précédemment).
A la fin de ses trois donnée, je souhaite faire une recherche
(rechercheV) qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coinçe sur la "Liste" des véhicules que je passe en paramètres a l=
a
sous routine "MaValidation()"
car la liste [ Formula1:=MaListe] n'est apparemment pas la même que si
je l'introduit manuellement
Formula1:="Peugeot;Fiat;Toyota;BMW", j'ai comparé mes deux chaines et
elles sont pareilles :-(
Et si j'ouvre la BDL "Validation" et me promène dans la "Chaîne",
après validation, cela fonctionne (sans rien changer).
Quelqu'un a une idée sour le problème d'une part, et comment résoudre
l'ensemble de ma feuille? :-))

--
Private Sub Worksheet_Activate()
Dim MaListe As String
Sheets("Véhicules").[A4:J1000].Sort Key1:=[B3], Key2:=[A3]
Dim temp()
ReDim temp(100)
i = 0
For Each c In Range([B4], [B65000].End(xlUp))
If IsError(Application.Match(c, temp, 0)) Then
temp(i) = c
i = i + 1
MaListe = MaListe & c & ";"
End If
Next c
MaListe = Mid(MaListe, 1, Len(MaListe) - 1)
Call MaValidation(MaListe)
End Sub
--

Sub MaValidation(MaListe)
ActiveSheet.Range("MaMarqueVéhicules").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:=MaListe
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Choix marque"
.ErrorTitle = " "
.InputMessage = "Erreur"
.ErrorMessage = "Cette marque n'est pas dans la liste"
.ShowInput = True
.ShowError = True
End With
End Sub
--

Merci d'avance pour votre aide,
Cordialement,
Emile
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #18448211
Fichier Exemple de AV

http://cjoint.com/?bxq15wQjbq

Et pour trier des données sans doublons,
il y a le filtre élaboré - pas besoin de critère - cocher la case dans le bas de la
fenêtre!



"Emile63"
Bonjour a tous,
Je peine un peu avec les procédures ci-après (qui ne fonctionne pas).
J'ai une (petite) base de données avec des voitures triées par,
marques, modèles, couleur, matriculation.
Et je souhaite (sans bouton de commande, ou boîte de dialogue),
pouvoir trier mes données "sans doublons" afin de succèssivement,
quand je clic sur une cellule donnée - dans ma feuille de calcul- que
la liste qui surgit de
Données -> Validation soit, sans doublons. La finalité (mais j'en suis
encore loin) étant de dérouler les marques disponibles, puis dans une
autre cellule, les modèles (de la marque choisie), puis les couleurs
(du modèle et marque choisis précédemment).
A la fin de ses trois donnée, je souhaite faire une recherche
(rechercheV) qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coinçe sur la "Liste" des véhicules que je passe en paramètres a la
sous routine "MaValidation()"
car la liste [ Formula1:=MaListe] n'est apparemment pas la même que si
je l'introduit manuellement
Formula1:="Peugeot;Fiat;Toyota;BMW", j'ai comparé mes deux chaines et
elles sont pareilles... :-(
Et si j'ouvre la BDL "Validation" et me promène dans la "Chaîne",
après validation, cela fonctionne (sans rien changer)....
Quelqu'un a une idée sour le problème d'une part, et comment résoudre
l'ensemble de ma feuille? :-))

-----------------------------------------------------------------------
Private Sub Worksheet_Activate()
Dim MaListe As String
Sheets("Véhicules").[A4:J1000].Sort Key1:=[B3], Key2:=[A3]
Dim temp()
ReDim temp(100)
i = 0
For Each c In Range([B4], [B65000].End(xlUp))
If IsError(Application.Match(c, temp, 0)) Then
temp(i) = c
i = i + 1
MaListe = MaListe & c & ";"
End If
Next c
MaListe = Mid(MaListe, 1, Len(MaListe) - 1)
Call MaValidation(MaListe)
End Sub
-----------------------------------------------------------------------

Sub MaValidation(MaListe)
ActiveSheet.Range("MaMarqueVéhicules").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:=MaListe
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Choix marque"
.ErrorTitle = " "
.InputMessage = "Erreur"
.ErrorMessage = "Cette marque n'est pas dans la liste"
.ShowInput = True
.ShowError = True
End With
End Sub
-----------------------------------------------------------------------

Merci d'avance pour votre aide,
Cordialement,
Emile
JB
Le #18448811
Bonjour,

http://boisgontierjacques.free.fr/fichiers/DVCascadeMenu4Niv.xls
http://boisgontierjacques.free.fr/pages_site/listes_cascade.htm

JB
http://boisgontierjacques.free.fr/


On 21 jan, 16:03, Emile63
Bonjour a tous,
Je peine un peu avec les procédures ci-après (qui ne fonctionne pas).
J'ai une (petite) base de données avec des voitures triées par,
marques, modèles, couleur, matriculation.
Et je souhaite (sans bouton de commande, ou boîte de dialogue),
pouvoir trier mes données "sans doublons" afin de succèssivement,
quand je clic sur une cellule donnée - dans ma feuille de calcul- que
la liste qui surgit de
Données -> Validation soit, sans doublons. La finalité (mais j'en sui s
encore loin) étant de dérouler les marques disponibles, puis dans une
autre cellule, les modèles (de la marque choisie), puis les couleurs
(du modèle et marque choisis précédemment).
A la fin de ses trois donnée, je souhaite faire une recherche
(rechercheV)  qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coinçe sur la "Liste" des véhicules que je passe en paramètres a la
sous routine "MaValidation()"
car la liste [ Formula1:=MaListe] n'est apparemment pas la même que s i
je l'introduit manuellement
 Formula1:="Peugeot;Fiat;Toyota;BMW", j'ai comparé mes deux chaines et
elles sont pareilles...   :-(
Et si j'ouvre la BDL "Validation" et me promène dans la "Chaîne",
après validation, cela fonctionne (sans rien changer)....
Quelqu'un a une idée sour le problème d'une part, et comment résoud re
l'ensemble de ma feuille?  :-))

-----------------------------------------------------------------------
Private Sub Worksheet_Activate()
Dim MaListe As String
   Sheets("Véhicules").[A4:J1000].Sort Key1:=[B3], Key2:=[A3]
   Dim temp()
   ReDim temp(100)
   i = 0
     For Each c In Range([B4], [B65000].End(xlUp))
     If IsError(Application.Match(c, temp, 0)) Then
       temp(i) = c
       i = i + 1
       MaListe = MaListe & c & ";"
     End If
   Next c
   MaListe = Mid(MaListe, 1, Len(MaListe) - 1)
       Call MaValidation(MaListe)
End Sub
-----------------------------------------------------------------------

Sub MaValidation(MaListe)
    ActiveSheet.Range("MaMarqueVéhicules").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertSt op,
Operator:= _
        xlBetween, Formula1:=MaListe
         .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "Choix marque"
        .ErrorTitle = " "
        .InputMessage = "Erreur"
        .ErrorMessage = "Cette marque n'est pas dans la liste"
        .ShowInput = True
        .ShowError = True
    End With
End Sub
-----------------------------------------------------------------------

Merci d'avance pour votre aide,
Cordialement,
Emile


Emile63
Le #18449481
On 21 ene, 16:03, Emile63
Bonjour a tous,



Données -> Validation soit, sans doublons. La finalité (mais j'en sui s
encore loin) étant de dérouler les marques disponibles, puis dans une
autre cellule, les modèles (de la marque choisie), puis les couleurs
(du modèle et marque choisis précédemment).
A la fin de ses trois donnée, je souhaite faire une recherche
(rechercheV)  qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coinçe sur la "Liste" des véhicules que je passe en paramètres a la
sous routine "MaValidation()"
car la liste [ Formula1:=MaListe] n'est apparemment pas la même que s i
je l'introduit manuellement
 Formula1:="Peugeot;Fiat;Toyota;BMW", j'ai comparé mes deux chaines et
elles sont pareilles...   :-(
Et si j'ouvre la BDL "Validation" et me promène dans la "Chaîne",
après validation, cela fonctionne (sans rien changer)....
Quelqu'un a une idée sour le problème d'une part, et comment résoud re
l'ensemble de ma feuille?  :-))

-----------------------------------------------------------------------



Bonjour Michel et merci pour ton aide,

J'ai bien vu (et téléchargé) le classeur de AV sur Excelabo ;-)
Et j'ai essayé de m'en inspirer, toutefois, quand j'ajoute des
doublons a ses véhicules dans sa feuille,
les doublons se répetent dans les déroulants...
Ce que je souhaite éviter par la procédure que je mentionne..

Pour préciser ma question, je souhaiterais savoir pour quelle raison
(si tu le sais )
quand je passe en paramètres une chaine avec le même contenu que si je
l'avais tapée "en dur"
dans : Formula1:=MaChaine
Celle-ci apparait bien dans la boite de dialogue de validation, mais
pas en déroulant de la cellule..
Je me demandais si ça pouvait-être une question de "clavier" ou
ponctuation au niveau du séparateur...
(par des virgules, points virgules, double points...)
Etonnament quand dans cette même boite de dialogue, j'entre dans la
zone de saisie Source:...
sans rien changer, et je valide et quitte la BdD, ça fonctionne, le
dérolant apparait sous la cellule...


Merci d'avance pour votre aide,
Cordialement,
Emile
michdenis
Le #18450211
Utilise le filtre élaboré pour établir un tableau dont les
doublons seront absents. Tu n'a pas besoin d'établir
un critère, coche seulement la case dans le bas de la feuille
du filtre élaboré.

En VBA, ça donnerait quelque chose comme ceci :

Les données de la feuil2.A1:Ax sont filtrées sans doublons
vers la feuil3.F1 . La procédure attribue un nom à la plage
F1:Fx, utilise ce nom dans ta liste de validation.

'------------------------------
Sub test()

With Feuil2
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.AdvancedFilter xlFilterCopy, , Feuil3.Range("F1"), True
End With
End With
With Feuil3
.Range("F2:F" & .Range("F65536").End(xlUp).Row).Name = "Liste1"
End With
End Sub
'------------------------------



"Emile63"
On 21 ene, 16:03, Emile63
Bonjour a tous,



Données -> Validation soit, sans doublons. La finalité (mais j'en suis
encore loin) étant de dérouler les marques disponibles, puis dans une
autre cellule, les modèles (de la marque choisie), puis les couleurs
(du modèle et marque choisis précédemment).
A la fin de ses trois donnée, je souhaite faire une recherche
(rechercheV) qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coinçe sur la "Liste" des véhicules que je passe en paramètres a la
sous routine "MaValidation()"
car la liste [ Formula1:=MaListe] n'est apparemment pas la même que si
je l'introduit manuellement
Formula1:="Peugeot;Fiat;Toyota;BMW", j'ai comparé mes deux chaines et
elles sont pareilles... :-(
Et si j'ouvre la BDL "Validation" et me promène dans la "Chaîne",
après validation, cela fonctionne (sans rien changer)....
Quelqu'un a une idée sour le problème d'une part, et comment résoudre
l'ensemble de ma feuille? :-))

-----------------------------------------------------------------------



Bonjour Michel et merci pour ton aide,

J'ai bien vu (et téléchargé) le classeur de AV sur Excelabo ;-)
Et j'ai essayé de m'en inspirer, toutefois, quand j'ajoute des
doublons a ses véhicules dans sa feuille,
les doublons se répetent dans les déroulants...
Ce que je souhaite éviter par la procédure que je mentionne..

Pour préciser ma question, je souhaiterais savoir pour quelle raison
(si tu le sais )
quand je passe en paramètres une chaine avec le même contenu que si je
l'avais tapée "en dur"
dans : Formula1:=MaChaine
Celle-ci apparait bien dans la boite de dialogue de validation, mais
pas en déroulant de la cellule..
Je me demandais si ça pouvait-être une question de "clavier" ou
ponctuation au niveau du séparateur...
(par des virgules, points virgules, double points...)
Etonnament quand dans cette même boite de dialogue, j'entre dans la
zone de saisie Source:...
sans rien changer, et je valide et quitte la BdD, ça fonctionne, le
dérolant apparait sous la cellule...


Merci d'avance pour votre aide,
Cordialement,
Emile
LSteph
Le #18451331
Bonsoir,

Sauf le plaisir de dire je peux le faire par vba, tu te compliques,
il te suffit d'utiliser le filtre élaboré et de choisir copier vers un
autre emplacement et cocher la case sans doublons.

--
lSteph


Emile63 a écrit :
On 21 ene, 16:03, Emile63
Bonjour a tous,



Données -> Validation soit, sans doublons. La finalité (mais j'en suis
encore loin) étant de dérouler les marques disponibles, puis dans une
autre cellule, les modèles (de la marque choisie), puis les couleurs
(du modèle et marque choisis précédemment).
A la fin de ses trois donnée, je souhaite faire une recherche
(rechercheV) qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coinçe sur la "Liste" des véhicules que je passe en paramètres a la
sous routine "MaValidation()"
car la liste [ Formula1:=MaListe] n'est apparemment pas la même que si
je l'introduit manuellement
Formula1:="Peugeot;Fiat;Toyota;BMW", j'ai comparé mes deux chaines et
elles sont pareilles... :-(
Et si j'ouvre la BDL "Validation" et me promène dans la "Chaîne",
après validation, cela fonctionne (sans rien changer)....
Quelqu'un a une idée sour le problème d'une part, et comment résoudre
l'ensemble de ma feuille? :-))

-----------------------------------------------------------------------



Bonjour Michel et merci pour ton aide,

J'ai bien vu (et téléchargé) le classeur de AV sur Excelabo ;-)
Et j'ai essayé de m'en inspirer, toutefois, quand j'ajoute des
doublons a ses véhicules dans sa feuille,
les doublons se répetent dans les déroulants...
Ce que je souhaite éviter par la procédure que je mentionne..

Pour préciser ma question, je souhaiterais savoir pour quelle raison
(si tu le sais )
quand je passe en paramètres une chaine avec le même contenu que si je
l'avais tapée "en dur"
dans : Formula1:=MaChaine
Celle-ci apparait bien dans la boite de dialogue de validation, mais
pas en déroulant de la cellule..
Je me demandais si ça pouvait-être une question de "clavier" ou
ponctuation au niveau du séparateur...
(par des virgules, points virgules, double points...)
Etonnament quand dans cette même boite de dialogue, j'entre dans la
zone de saisie Source:...
sans rien changer, et je valide et quitte la BdD, ça fonctionne, le
dérolant apparait sous la cellule...


Merci d'avance pour votre aide,
Cordialement,
Emile



Emile63
Le #18453251
On 21 ene, 16:03, Emile63
Bonjour a tous,
Je peine un peu avec les procédures ci-après (qui ne fonctionne pas).
J'ai une (petite) base de données avec des voitures triées par,
marques, modèles, couleur, matriculation.
Et je souhaite (sans bouton de commande, ou boîte de dialogue),
pouvoir trier mes données "sans doublons" afin de succèssivement,
quand je clic sur une cellule donnée - dans ma feuille de calcul- que
la liste qui surgit de
Données -> Validation soit, sans doublons. La finalité (mais j'en sui s
encore loin) étant de dérouler les marques disponibles, puis dans une
autre cellule, les modèles (de la marque choisie), puis les couleurs
(du modèle et marque choisis précédemment).
A la fin de ses trois donnée, je souhaite faire une recherche
(rechercheV)  qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coinçe sur la "Liste" des véhicules que je passe en paramètres a la
sous routine "MaValidation()"
car la liste [ Formula1:=MaListe] n'est apparemment pas la même que s i
je l'introduit manuellement
 Formula1:="Peugeot;Fiat;Toyota;BMW", j'ai comparé mes deux chaines et
elles sont pareilles...   :-(
Et si j'ouvre la BDL "Validation" et me promène dans la "Chaîne",
après validation, cela fonctionne (sans rien changer)....
Quelqu'un a une idée sour le problème d'une part, et comment résoud re
l'ensemble de ma feuille?  :-))

-----------------------------------------------------------------------
Private Sub Worksheet_Activate()
Dim MaListe As String
   Sheets("Véhicules").[A4:J1000].Sort Key1:=[B3], Key2:=[A3]
   Dim temp()
   ReDim temp(100)
   i = 0
     For Each c In Range([B4], [B65000].End(xlUp))
     If IsError(Application.Match(c, temp, 0)) Then
       temp(i) = c
       i = i + 1
       MaListe = MaListe & c & ";"
     End If
   Next c
   MaListe = Mid(MaListe, 1, Len(MaListe) - 1)
       Call MaValidation(MaListe)
End Sub
-----------------------------------------------------------------------

Sub MaValidation(MaListe)
    ActiveSheet.Range("MaMarqueVéhicules").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertSt op,
Operator:= _
        xlBetween, Formula1:=MaListe
         .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "Choix marque"
        .ErrorTitle = " "
        .InputMessage = "Erreur"
        .ErrorMessage = "Cette marque n'est pas dans la liste"
        .ShowInput = True
        .ShowError = True
    End With
End Sub
-----------------------------------------------------------------------

Merci d'avance pour votre aide,
Cordialement,
Emile



Bonjour à tous et merci pour votre aide. ;-)
vous avez raison, l'option "Filtre avançé" permettrait en partie de
sortir une liste sans doublons.
Mon problème c'est que je ne souhaite pas la sortir / copier a une
autre adresse, ni filtrer la BDD sur place.
Voila pourquoi mon choix avec l'option : Validation -> Liste...
Qui me conviendrait parfaitement si ça fonctionne...
De plus j'ai plusieures listes de validations sur d'autres cellules
qui elles-mêmes sont soumises à des formules... Donc si c'est
possible, je préfere garder ce principe et suivre cette voie.

-Est-ce que quelqu'un sait pourquoi la variable [MaListe] ne
fonctionne pas avec l'objet [Validation].
J'ai l'impression qu'il doit s'agir d'un détail qui m'échappe... :-(
Eventuellement autour de l'affectation de la de la variable: As
Variant ? ou ReDim ?? ou la réaffecter une fois que les arguments
sont passés à la sous-routine?
Merci de votre sollicitude, cordialement,
Emile
Emile63
Le #18529181
On 21 ene, 16:03, Emile63
Bonjour a tous,
Butant toujours avec mon problème, je me permets de relancer ma
question:

-Est-ce que quelqu'un saurait me dire pourquoi la variable [MaListe]
ne
fonctionne pas avec l'objet [Validation].
J'ai l'impression qu'il doit s'agir d'un détail qui m'échappe... :-
(
Eventuellement autour de l'affectation de la de la variable:
As Variant ? ou ReDim ?? ou la réaffecter une fois que les arguments
sont passés à la sous-routine [MaValidation] ?

Je vous remercie d'avance pour votre sollicitude, cordialement,
Emile

-----------------------------------------------------------------------
Private Sub Worksheet_Activate()
Dim MaListe As String
   Sheets("Véhicules").[A4:J1000].Sort Key1:=[B3], Key2:=[A3]
   Dim temp()
   ReDim temp(100)
   i = 0
     For Each c In Range([B4], [B65000].End(xlUp))
     If IsError(Application.Match(c, temp, 0)) Then
       temp(i) = c
       i = i + 1
       MaListe = MaListe & c & ";"
     End If
   Next c
   MaListe = Mid(MaListe, 1, Len(MaListe) - 1)
       Call MaValidation(MaListe)
End Sub
-----------------------------------------------------------------------

Sub MaValidation(MaListe)
    ActiveSheet.Range("MaMarqueVéhicules").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertSt op,
Operator:= _
        xlBetween, Formula1:=MaListe
         .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "Choix marque"
        .ErrorTitle = " "
        .InputMessage = "Erreur"
        .ErrorMessage = "Cette marque n'est pas dans la liste"
        .ShowInput = True
        .ShowError = True
    End With
End Sub
-----------------------------------------------------------------------

Merci d'avance pour votre aide,
Cordialement,
Emile


isabelle
Le #18532051
bonjour Emile,

une solution possible :
ajoute cette commande à la fin de la procedure Worksheet_Activate,

Application.Dialogs(xlDialogDataValidation).Show

il ne restera qu'à faire un click sur "OK"

isabelle

Emile63 a écrit :
On 21 ene, 16:03, Emile63
Bonjour a tous,
Butant toujours avec mon problème, je me permets de relancer ma
question:

-Est-ce que quelqu'un saurait me dire pourquoi la variable [MaListe]
ne
fonctionne pas avec l'objet [Validation].
J'ai l'impression qu'il doit s'agir d'un détail qui m'échappe... :-
(
Eventuellement autour de l'affectation de la de la variable:
As Variant ? ou ReDim ?? ou la réaffecter une fois que les arguments
sont passés à la sous-routine [MaValidation] ?

Je vous remercie d'avance pour votre sollicitude, cordialement,
Emile


-----------------------------------------------------------------------
Private Sub Worksheet_Activate()
Dim MaListe As String
Sheets("Véhicules").[A4:J1000].Sort Key1:=[B3], Key2:=[A3]
Dim temp()
ReDim temp(100)
i = 0
For Each c In Range([B4], [B65000].End(xlUp))
If IsError(Application.Match(c, temp, 0)) Then
temp(i) = c
i = i + 1
MaListe = MaListe & c & ";"
End If
Next c
MaListe = Mid(MaListe, 1, Len(MaListe) - 1)
Call MaValidation(MaListe)
End Sub
-----------------------------------------------------------------------

Sub MaValidation(MaListe)
ActiveSheet.Range("MaMarqueVéhicules").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:=MaListe
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Choix marque"
.ErrorTitle = " "
.InputMessage = "Erreur"
.ErrorMessage = "Cette marque n'est pas dans la liste"
.ShowInput = True
.ShowError = True
End With
End Sub
-----------------------------------------------------------------------

Merci d'avance pour votre aide,
Cordialement,
Emile







michdenis
Le #18532041
Tes procédures fonctionnent bien. Sauf, que en vba
tu dois remplacer le ; par la virgule dans la procédure
activate sinon ta liste sera sur une même ligne plutôt
qu'en colonne.

Cependant, lorsque vient le temps d'exécuter cette ligne
de code .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:=MaListe
une erreur est générée si la chaîne de caractères est au delà
de 911 caractères... mais la réalité, c'est que l'affichage de la
liste ne peut contenir plus de 255 caractères dans la liste
de validation de ta feuille de calcul

Pour obtenir davantage, il faudrait que tu copies la liste obtenue
dans une colonne de ton choix, et que tu donnes
un "NOM" (insertion / nom/ définir..) et que tu utilises ce nom
dans ta procédure pour ajouter ta liste de validation.

Un exemple comment transformer ta procédure :
Tu peux copier ta liste dans une feuille masquée
dont personne ne connait l'existence
Worksheets("NomFeuille").Visible = xlSheetVeryHidden
et ne pas oublié d'insérer la référence du nom de la feuille
au moment de la copie

'--------------------------------------------
Private Sub Worksheet_Activate()
Dim MaListe(), A As Integer
A = 1
With Range([A1], [A65000].End(xlUp))
ReDim MaListe(1 To .Rows.Count)
For Each c In .Cells
If IsError(Application.Match(c, MaListe, 0)) Then
Err.Clear
MaListe(A) = c.Value
A = A + 1
End If
Next c
End With
'Choisis la destination de ton choix
With Range("G1").Resize(UBound(MaListe))
.Value = Application.Transpose(MaListe)
.Name = "LaListe"
End With
Call MaValidation("LaListe")
End Sub
'--------------------------------------------
Sub MaValidation(MaListe)
ActiveSheet.Range("C1").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & MaListe
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Choix marque"
.ErrorTitle = " "
.InputMessage = "Erreur"
.ErrorMessage = "Cette marque n'est pas dans la liste"
.ShowInput = True
.ShowError = True
End With
End Sub
'--------------------------------------------






"Emile63"
On 21 ene, 16:03, Emile63
Bonjour a tous,
Butant toujours avec mon problème, je me permets de relancer ma
question:

-Est-ce que quelqu'un saurait me dire pourquoi la variable [MaListe]
ne
fonctionne pas avec l'objet [Validation].
J'ai l'impression qu'il doit s'agir d'un détail qui m'échappe... :-
(
Eventuellement autour de l'affectation de la de la variable:
As Variant ? ou ReDim ?? ou la réaffecter une fois que les arguments
sont passés à la sous-routine [MaValidation] ?

Je vous remercie d'avance pour votre sollicitude, cordialement,
Emile

-----------------------------------------------------------------------
Private Sub Worksheet_Activate()
Dim MaListe As String
Sheets("Véhicules").[A4:J1000].Sort Key1:=[B3], Key2:=[A3]
Dim temp()
ReDim temp(100)
i = 0
For Each c In Range([B4], [B65000].End(xlUp))
If IsError(Application.Match(c, temp, 0)) Then
temp(i) = c
i = i + 1
MaListe = MaListe & c & ";"
End If
Next c
MaListe = Mid(MaListe, 1, Len(MaListe) - 1)
Call MaValidation(MaListe)
End Sub
-----------------------------------------------------------------------

Sub MaValidation(MaListe)
ActiveSheet.Range("MaMarqueVéhicules").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:=MaListe
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Choix marque"
.ErrorTitle = " "
.InputMessage = "Erreur"
.ErrorMessage = "Cette marque n'est pas dans la liste"
.ShowInput = True
.ShowError = True
End With
End Sub
-----------------------------------------------------------------------

Merci d'avance pour votre aide,
Cordialement,
Emile


Emile63
Le #18545461
Merci por vos solutions Isabelle et Michel,
C'était aussi simple que le point-virgule et la virgule... Trop fort
Michel ;-)
Je n'ai que quelques "marques" sur mon listing, qui ne dépassent
largement pas les 250 caractères.
Toutefois je vais appliquer ton conseil au sujet de la feuille
masquée.
Ceci préviendra d'ultérieures augmentations de donnéees.
Encore merci,
Cordialement,

Emile
Publicité
Poster une réponse
Anonyme