Liste validation de données dynamique ?

GUY rrr

XLDnaute Occasionnel
Bonjour le forum,

Je construis un fichier ayant entre autre pour objectif de mettre à jour (d'une ligne et colonne à l'autre selon conditions) une liste de véhicules disponibles.
Cette liste évoluera à la demande, permettant d'avoir une aide à la décision et surtout de vérifier qu'un véhicule sera disponible.
Je joins un fichier exemple avec des explications qui je l'espère seront claires.
Une telle mise en place me dépassant, je sollicite votre aide et vos suggestions.

Merci.
 

Pièces jointes

  • Essai liste validation.xlsm
    11.8 KB · Affichages: 14

GUY rrr

XLDnaute Occasionnel
Bonsoir BOISGONTIER, le forum,

Merci pour votre réponse qui s'approche de ce que je souhaite faire mais avec, je pense, un peu plus de contraintes ...
Une adaptation pourrait-elle être envisagée pour mon fichier ?

Merci pour votre proposition et pour votre travail ;)
 

GUY rrr

XLDnaute Occasionnel
Bonsoir eriiiic, BOISGONTIER, le forum,

OUIIII, désolé pour la méprise. J'avais commencé mes explications avec les mauvaises colonnes.
Merci de revoir l'explication dans le nouveau fichier ci-joint.

Cordialement
 

Pièces jointes

  • Essai liste validation.xlsm
    11.8 KB · Affichages: 6

eriiic

XLDnaute Barbatruc
Une proposition :
VB:
' Feuil1
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("b:b,n:n,r:r,t:t,x:x,z:z")) Is Nothing Then majVehicule
End Sub

' Module1
Sub majVehicule()
    Dim datas, listeVe, ve As String
    Dim dictVe, lig As Long, i As Long
    Set dictVe = CreateObject("Scripting.Dictionary")
    ' liste véhicules
    listeVe = [VEHICULE].Value
    For i = 1 To UBound(listeVe)
        If listeVe(i, 1) <> "" Then dictVe(listeVe(i, 1)) = 1
    Next i
    'données aller-retour
    With Worksheets("Feuil1")
        datas = .[A3:Z3].Resize(.Cells(Rows.Count, 2).End(xlUp).Row - 2).Value
    End With
    ' liste véhicules restants
    For lig = 1 To UBound(datas)
        If datas(lig, 2) <> "" And datas(lig, 14) <> "" And datas(lig, 18) = "" Then _
           If dictVe.Exists(datas(lig, 14)) Then dictVe.Remove datas(lig, 14)
        If datas(lig, 20) <> "" And datas(lig, 24) <> "" And datas(lig, 26) = "" Then _
           If dictVe.Exists(datas(lig, 24)) Then dictVe.Remove datas(lig, 24)
    Next lig
    ' coller
    With Worksheets("Feuil2")
    If .Cells(Rows.Count, 2).End(xlUp).Row > 1 Then
        .[B2].Resize(.Cells(Rows.Count, 2).End(xlUp).Row - 1).ClearContents
        End If
        .[B2].Resize(dictVe.Count) = Application.Transpose(dictVe.keys)
    End With
End Sub
Par contre je me demande si tu ne devrais pas mettre une heure prévisionnelle de fin pour pouvoir ré-attribuer le véhicule même s'il n'est pas encore rentré.
Par exemple qq'un t'en demande une pour 13h et tu n'en as plus, alors que CAR1 n'est parti que pour 30' en théorie.
eric
 

GUY rrr

XLDnaute Occasionnel
Bonsoir eriiiic, BOISGONTIER, le forum,

Eriiiic, MERCI pour votre retour, vous avez totalement saisi ma demande.
La macro fonctionne à merveille en Feuil2 avec maj des véhicules mais me propose systématiquement en Feuil1 la totalité des véhicules avec ou sans retour du véhicule concerné (ex: CAR1 en X4 dispo alors qu'il n'y a pas d'heure de fin en R4).

Auriez-vous le remède ?

En ce qui concerne votre proposition d'heure prévisionnelle, l'activité en elle même me l'interdit pour deux raisons:

- Les impondérables de la route et autres (d'ou l'intérêt de se fier aux faits et non à la théorie).
- La nécessité de proposer une mise à disposition fiable ou bien de ne rien proposer.

Je vous joins le fichier avec vos consignes.

Cordialement
 

Pièces jointes

  • Essai liste validation2.xlsm
    21.2 KB · Affichages: 5

GUY rrr

XLDnaute Occasionnel
Bonjour eriiiic, BOISGONTIER, le forum,

J'ai souvent remarqué que la nuit portait conseil ...
Eriiiic, je ne m'étais pas aperçu que vous m'aviez fourni LA solution au premier jet o_O ...
Il m'a suffi de nommer B2:B13 en Feuil2, sélectionner mes plages avec liste déroulante, et les renommer.
En fait, vous m'avez offert le remède mais je ne savais pas qu'en faire ...
... Je suis trop fort ... :oops:

MERCI BEAUCOUP pour votre talent, votre temps et votre engagement. Je vais pouvoir avancer dans ma construction.

Cordialement
 

GUY rrr

XLDnaute Occasionnel
Bonjour eriiiic, BOISGONTIER, le forum,

Après plusieurs tentatives d'adaptation de votre macro à mon fichier réel, je me rends compte que ... Je suis vraiment trop fort ... :oops:
Avec mes maigres connaissances en la matière, je suppose qu'il doit s'agir d'une histoire de dimension ... ou pas ...
J'ai fait une Xieme tentative en PJ, mais sans succès.

Eriiiic, pourriez-vous s'il vous plait adapter votre macro à la partie de mon fichier qui m'interresse ?

Cordialement
 

Pièces jointes

  • Test Essai liste validation.xlsm
    21.3 KB · Affichages: 5

eriiic

XLDnaute Barbatruc
Tu n'as pas mis le nom Vehicule1 (respecter majuscule) :
VB:
=DECALER($AC$2;;;NBVAL($AC:$AC)-1)
J'ai modifié aussi ton nom VEHICULE qu'il soit dynamique. La liste s'adapte si tu ajoutes ou enlèves un véhicule.
Ne rien inscrire d'autre sous les 2 listes !

Et tu ne dois pas avoir de #VALEUR. J'ai viré ceux en B.
S'il est possible que tu en aies, précise sur quelles colonnes que je complète le code.
eric
 

Pièces jointes

  • Test Essai liste validation.xlsm
    24.1 KB · Affichages: 5

GUY rrr

XLDnaute Occasionnel
Bonjour eriiiic, BOISGONTIER, le forum,

Eriiiic,

Avec les modifications apportées, je me retrouve en liste AC avec le dernier véhicule en doublon voir plus selon le nombre de véhicules sortis.
De plus, je ne sais pas si c'est moi, mais en ayant copié comme il faut sur mon fichier final, la macro bute "erreur d'exécution 13 - incompatibilité de type" ...
ligne 16: If datas(lig, 2) <> "" And datas(lig, 14) <> "" And datas(lig, 18) = "" Then _
Tout ceci est curieux, je ne comprends pas.

Je me permets de vous joindre le fichier test pour vérification.

Cordialement
 

Pièces jointes

  • Test Essai liste validation.xlsm
    22.7 KB · Affichages: 8

eriiic

XLDnaute Barbatruc
Ah oui, je n'avais pas controlé tes modifs ni testé à fond.
A la fin dans :
VB:
    With Worksheets("Feuil1")
        If .Cells(Rows.Count, 2).End(xlUp).Row > 1 Then
            .[AC2].Resize(.Cells(Rows.Count, 2).End(xlUp).Row - 1).ClearContents
        End If
        .[AC2].Resize(dictVe.Count) = Application.Transpose(dictVe.keys)
    End With
le ,2) signifie colonne 2 (B), ce qui n'est plus valable.

Tu peux aussi indiquer la colonne sous forme de ref lettre.
A remplacer par :
VB:
    ' coller
    With Worksheets("Feuil1")
        Application.EnableEvents = False
        If .Cells(Rows.Count, "AC").End(xlUp).Row > 1 Then
            .[AC2].Resize(.Cells(Rows.Count, "AC").End(xlUp).Row - 1).ClearContents
        End If
        If dictVe.Count = 0 Then
            .[AC2] = "Plus de véhicule"
        Else
            .[AC2].Resize(dictVe.Count) = Application.Transpose(dictVe.keys)
        End If
        Application.EnableEvents = True
    End With
J'ai aussi ajouté une désactivation des événements vu que maintenant ta liste est dans la feuille supervisée par Change.
eric

Edit 18:37 : ajout message "Plus de véhicule" au lieu de liste vide (que j'avais oublié de traiter d'ailleurs)
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa