Liste de avec saisie intuitive semie automatique

Bonjour à toutes et à tous,

J'ai relevé ce code réalisé par Steelson.

dans cette discussion :https://forum.excel-pratique.com/viewtopic.php?f=2&t=117477

Const nbZones = 8

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim data() As Variant
Dim choix() As Variant
Dim dico As Object
Dim i&, iData&, iZone&, plus&

    If Target.Count <> 1 Then Exit Sub
    plus = Target.Row - 1
    If plus = 0 Then Exit Sub

    ReDim choix(1 To nbZones)
    For i = 1 To nbZones
        choix(i) = Range("zone" & i).Offset(plus, 0).Value
        If Not Intersect(Range("zone" & i).Offset(plus, 0), Target) Is Nothing Then
            data = [TabData].Value
            Set dico = CreateObject("Scripting.Dictionary")
            For iData = 1 To UBound(data)
                flag = True
                If i > 1 Then
                    For iZone = 1 To i - 1
                        If choix(iZone) <> CStr(data(iData, iZone)) Then flag = False
                    Next
                End If
                If flag Then dico(CStr(data(iData, i))) = ""
            Next iData
            If dico.Count > 0 Then
                Target.Validation.Delete
                Target.Validation.Add xlValidateList, Formula1:=Join(dico.keys, ",")
            End If
            Exit For
        End If
    Next i
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count <> 1 Then Exit Sub
    plus = Target.Row - 1
    If plus = 0 Then Exit Sub

    For i = 1 To nbZones
        If Not Intersect(Range("zone" & i).Offset(plus, 0), Target) Is Nothing Then
            If i < nbZones Then
                Application.EnableEvents = False
                For iZone = i + 1 To nbZones
                    With Range("zone" & iZone).Offset(plus, 0)
                        .Value = ""
                        .Validation.Delete
                    End With
                Next
                Application.EnableEvents = True
            End If
            Exit For
        End If
    Next

End Sub

Je n'arrive pas à l'adapter à ce que je souhaite faire, c'est à dire :

- Commercer les colonnes qui comporte la première liste de validation en colonne F;

- Dans l'ancienne discussion, Steelson avait noté,

Les en-têtes de colonnes de la page dans laquelle s'affichent les listes déroulantes doivent s'appeler zone1, zone2 etc ...

.

Serait il possible que les les en-têtes de colonnes dans laquelle s'affichent les listes déroulantes porte le même nom que les en-têtes de la TabData ?

Steelson si vous passez par là ; sinon, merci a vous de prendre du temps pour me permettre d'avancer

Eric

Bonjour,

je suis là ...

ce n'est pas exclu, il faut que je regarde comment mettre un alias peut-être, ou une matrice,

car pour le moment, j'avais choisi de mettre une racine avec un indice pour effectuer cette boucle

    For i = 1 To nbZones
        choix(i) = Range("zone" & i).Offset(plus, 0).Value

je te réponds dans la journée

Bonjour Steelson,

Merci de prendre le temps pour me répondre.

Au plaisir de te lire

Eric

Re-

L'un des problèmes les plus importants, c'est que les noms de zone ne permettent pas les mêmes caractères que les en-têtes de tableau (beaucoup plus libres). Il y a beaucoup plus de restrictions.

Du coup, la seule solution est de donner un nom "générique" à chaque zone ... ce qui revient presque à donner en automatique lors de l'activation de la feuille un nom "non significatif" à chaque en-tête ! mais sur combien de termes ?

Peux-tu me donner un exemple anonymisé de ce que tu voudrais ?

Re.,

En PJ un dossier

11classeurforum.xlsx (12.64 Ko)

Je suis désolé mais pour le moment, à chaque lancement, j'ai ce message (inoffensif car réparable !)

capture d ecran 35

Conclusion = je ne suis pas sûr d'arriver à un tel paramétrage, sans compter les soucis éventuels de noms incompatibles avec les règles de nommage !

Est-ce si contraignant que cela de nommer "zone1", "zone2" etc. les en-têtes de colonnes ?

Ne sois pas désolé, c'est déjà beaucoup de passer du temps à essayer de résoudre les "problèmes" des autres ...

C'est juste que je vais imprimé le doc et que le nom des colonnes ne correspondra pas. Y'a t il un moyen de contourner cela ?

PS : Est il quand même possible de décaler à la colonne E ?

Ne sois pas désolé, c'est déjà beaucoup de passer du temps à essayer de résoudre les "problèmes" des autres ...

C'est juste que je vais imprimé le doc et que le nom des colonnes ne correspondra pas.

Attends, un truc que je ne pige pas .... le nom "zone1", "zone2" ne se voit pas en impression !! en impression on voit le titre que tu donnes à la colonne (mais le nommage de ces zones est bien "zone1" etc...). Ne pas confondre contenu d'une cellule et son nom (qui ne se voit qu'en cliquant dessus et en lisant en haut à gauche généralement).

capture d ecran 36
8classeurforum.xlsm (20.78 Ko)

Bonjour Steelson,

Désolé pour l'incompréhension, je me suis mal exprimé et t'ais fait perdre du temps; excuses moi.

Ton fichier correspond tout à fait à ce que je souhaiterais faire. Je l'adapte à mon fichier original et reviens vers toi pour te dire.

Dans tous les cas merci à toi pour le temps passé à m'aider

Eric

Edit : Je suis arrivé a adapter ta macro à mon fichier original. SUPER !!!!

Ce que je constate : Lorsque je remplie les 3 cellules à l'aide de s liste déroulantes tout est OK. Je re clique sur la cellule de la colonne E2 (par exemple) et les autres cellule des colonnes F2 (par exemple)et G2 (par exemple) s'effacent, serait il possible d'éviter cela ?

Eric

Ce que je constate : Lorsque je remplie les 3 cellules à l'aide de s liste déroulantes tout est OK. Je re clique sur la cellule de la colonne E2 (par exemple) et les autres cellule des colonnes F2 (par exemple)et G2 (par exemple) s'effacent, serait il possible d'éviter cela ?

Oui c'est voulu ... car les "descendants" ne sont plus les mêmes lorsqu'on change un "ascendant". On risque de créer des aberrations.

Si tu veux vraiment, alors va dans la macro et met une apostrophe devant la seconde ligne de cet extrait (.Value = "") :

                    With Range("zone" & iZone).Offset(plus, 0)
                        '.Value = ""
                        .Validation.Delete
                    End With

Re,

C'est surtout que d'autres personnes vont utiliser ce fichier et si elles cliquent sur une des colonnes ça va tout effacer. Et comme, quand colonnes sont remplies cela équivaut à savoir ce qu'il faut mettre comme produits ... pour obtenir le produit final ... Je te laisse imaginer la galère si des cellules s'effacent. Comment est il possible de remédier à cela sans que

On risque de créer des aberrations.

?

On pourrait en effet ne pas effacer mais mettre en rouge par une MFC si la relation entre les différents choix a été rompue et n'est plus cohérente.

Je vais regarder ...

Voici une alerte sans effacement des zones normalement dépendantes, par MFC.

On peut masquer les 2 colonnes de test (formules matricielles)

9classeurforum.xlsm (22.31 Ko)

si ceci te convient ...

Bonjour Steelson,

Désolé pour l'absence, beaucoup de boulot en fin de semaine. Je n'ai pas eu le temps de regarder. J'essaie de faire ça se weekend et reviens vers toi.

Bon weekend à toi

Eric

Bonjour Steelson,

J'ai un message à l'ouverture de mon fichier

Jusqu'à présent, aprés avoir adapté à mon fichier original, cela fonctionné bien, j'ai "juste" rajouté des données dans les colonnes A; B; C; D et voici les messages d"erreur qui s'affichent lorsque j'ouvre le fichier. Je n'ai pas pour le moment consulter ton dernier fichier.

Message 1 :

capture1

Je clique sur OUI et le message suivant s'affiche

capture2

Je ne sais pas quoi dire sans voir le fichier.

A l'origine il n'y avait pas de sheet5 !

Essaie d'enregistrer et de reprendre.

Sinon repars du post ci-dessus, j'ai re-téléchargé et je n'ai pas d'erreur !

Ou encore envois ton fichier (en mp si besoin) !

je ne suis pas dispo de la journée ...

Rechercher des sujets similaires à "liste saisie intuitive semie automatique"