Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trier des listes (Validation) sans doublons..

10 réponses
Avatar
Emile63
Bonjour a tous,
Je peine un peu avec les proc=E9dures ci-apr=E8s (qui ne fonctionne pas).
J'ai une (petite) base de donn=E9es avec des voitures tri=E9es par,
marques, mod=E8les, couleur, matriculation.
Et je souhaite (sans bouton de commande, ou bo=EEte de dialogue),
pouvoir trier mes donn=E9es "sans doublons" afin de succ=E8ssivement,
quand je clic sur une cellule donn=E9e - dans ma feuille de calcul- que
la liste qui surgit de
Donn=E9es -> Validation soit, sans doublons. La finalit=E9 (mais j'en suis
encore loin) =E9tant de d=E9rouler les marques disponibles, puis dans une
autre cellule, les mod=E8les (de la marque choisie), puis les couleurs
(du mod=E8le et marque choisis pr=E9c=E9demment).
A la fin de ses trois donn=E9e, je souhaite faire une recherche
(rechercheV) qui m'affiche la plaque d'immatriculation par rapport au
contenu des 3 cellules.
Je coin=E7e sur la "Liste" des v=E9hicules que je passe en param=E8tres a l=
a
sous routine "MaValidation()"
car la liste [ Formula1:=3DMaListe] n'est apparemment pas la m=EAme que si
je l'introduit manuellement
Formula1:=3D"Peugeot;Fiat;Toyota;BMW", j'ai compar=E9 mes deux chaines et
elles sont pareilles... :-(
Et si j'ouvre la BDL "Validation" et me prom=E8ne dans la "Cha=EEne",
apr=E8s validation, cela fonctionne (sans rien changer)....
Quelqu'un a une id=E9e sour le probl=E8me d'une part, et comment r=E9soudre
l'ensemble de ma feuille? :-))

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

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

Merci d'avance pour votre aide,
Cordialement,
Emile

10 réponses

Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

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
Avatar
JB
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 wrote:
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


Avatar
Emile63
On 21 ene, 16:03, Emile63 wrote:
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
Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

On 21 ene, 16:03, Emile63 wrote:
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
Avatar
LSteph
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 wrote:
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



Avatar
Emile63
On 21 ene, 16:03, Emile63 wrote:
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
Avatar
Emile63
On 21 ene, 16:03, Emile63 wrote:

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


Avatar
isabelle
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 wrote:

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







Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

On 21 ene, 16:03, Emile63 wrote:

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


Avatar
Emile63
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