Validation en cascade sur listes avec trous

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dionys0s

XLDnaute Impliqué
Bonsoir le forum 🙂

j'ai un petit soucis à régler
J'ai un plan comptable général dans une feuille, et une liste des opérations dans une autre.

J'aimerais, par ligne, faire des listes en cascade qui se mettent à jour automatiquement (par VBA donc je suppose) pour saisir les opérations et les comptes associés.

C'est à dire que je sélectionne un intitulé en A2 (les comptes de classe 2 par exemple), puis en B2, il me propose la liste des comptes de classe 2 du rang inférieur, et ainsi de suite sur 6 rangs de classification (jusqu'en colonne F donc).

J'ai essayé sans VBA avec le gestionnaire de noms et les listes de validation sans succès. J'essaye avec VBA mais je galère et sèche.

Mon fichier exemple sera peut-être plus clair que mon laborieux discours.

D'avance merci pour votre aide ^^

dionys0s
 

Pièces jointes

Re : Validation en cascade sur listes avec trous

Bonjour,

Voir PJ

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect([A2:A10], Target) Is Nothing Then
   Set d = CreateObject("scripting.dictionary")
   For Each c In Application.Index([bd], , 1)
     If c <> "" Then
       temp = c.Value & c.Offset(, 6).Value
       d(temp) = ""
     End If
   Next c
   Sheets("bd").[J2].Resize(d.Count) = Application.Transpose(d.keys)
 End If
 '--
 If Not Intersect([b2:e10], Target) Is Nothing And Target.Count = 1 Then
  col = Target.Column
  Sheets("bd").Cells(2, 9 + col).Resize(100).ClearContents
  If Target.Offset(, -1) <> "" Then
    Set d = CreateObject("scripting.dictionary")
    For Each c In Application.Index([bd], , col)
     If c.Value <> "" Then
       If Left(c, col - 1) = Left(Target.Offset(, -1), col - 1) Then
         temp = c.Value & c.Offset(, 7 - col).Value
         d(temp) = ""
       End If
      End If
    Next c
    If d.Count > 0 Then Sheets("bd").Cells(2, 9 + col).Resize(d.Count) = Application.Transpose(d.keys)
   End If
  End If
End Sub

JB
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

L
Réponses
5
Affichages
1 K
LeLyonnais
L
Retour