Gerer Base de Données

  • Initiateur de la discussion Initiateur de la discussion KTM
  • Date de début Date de début

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 !

KTM

XLDnaute Impliqué
Salut chers Tous
Mon probleme du jour est le suivant
Je travaille sur une base de données dans laquelle en face de chaque état de stock d'un produit ( RUPTURE,STOCK DORMANT,SURSTOCK) on doit lister toutes les structures pouvant apporter un appuis .
Par exemple dans mon fichier joint :
Le produit "a" est
-En dormance à AB et DH
-En Rupture à DX,RT,TF
-En surstock à CD,DGK
Donc on doit pouvoir en Face de chaque STOCK DORMANT et SURSTOCK lister (DX,RT,TF) c'est à dire les Structures ayant connu RUPTURE
et en face de Chaque RUPTURE lister (AB,CD,DH,DGK) c'est à dire les structures avec STOCK DORMANT ou SURSTOCK.
Avec une Base de donnée restreinte comme dans ce test c'est Facile , mais avec la réelle Base de Donnée c'est un véritable calvaire

Je réfléchis comment passer par VBA
Merci de m'accompagner dans ma réflexion et / ou me donner des ébauches de solution. Merci
 

Pièces jointes

Puissante et extraordinaire formule
Bonjour KTM, JE, JB,

On peut se passer de VBA avec cette formule matricielle en F2 du fichier joint :

=SIERREUR(INDEX($A:$A;PETITE.VALEUR(SI($E2<>"RUPTURE";SI(($D$2:$D$1000=$D2)*($E$2:$E$1000="RUPTURE");LIGNE($E$2:$E$1000));SI(($D$2:$D$1000=$D2)*($E$2:$E$1000<>"RUPTURE");LIGNE($E$2:$E$1000)));COLONNES($F2:F2)));"")

à valider par Ctrl+Maj+Entrée tirer à droite et vers le bas.

Les résultats ne sont pas concaténés mais dans des cellules adjacentes.

A+
Merci encore job75 votre formule m'a ebloui meme si je n'arrive pas encore à la déchiffrer.
Je l'ai adaptée à plusieurs situations et elle est impeccable cependant une petite préoccupation:
Ici si j'ai compris notre plage doit faire maxi 1000 lignes.
je voudrais l'uliser dans un code VBA et remplacer 1000 par "dlig" (dernière ligne non vide) au cas ou on aurait plus de lignes
Pour déterminer dlig pas de soucis.
Merci encore
 
Bonjour KTM, le forum,

On peut rendre la formule de mon post #10 dynamique avec des plages nommées :
Code:
=SIERREUR(INDEX(STRUCTURE;PETITE.VALEUR(SI($E2<>"RUPTURE";SI((PRODUIT=$D2)*(ETAT="RUPTURE");LIGNE(ETAT));SI((PRODUIT=$D2)*(ETAT<>"RUPTURE");LIGNE(ETAT)));COLONNES($F2:F2)));"")
les plages étant renommées à chaque modification de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With [A1].CurrentRegion
    .Columns(1).Name = "STRUCTURE"
    .Columns(4).Name = "PRODUIT"
    .Columns(5).Name = "ETAT"
End With
End Sub
Fichier (2).

Bonne journée.
 

Pièces jointes

- 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
Retour