Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA : Extraire données tableau sur une autre colonne

  • Initiateur de la discussion Initiateur de la discussion Yücel
  • 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 !

Yücel

XLDnaute Junior
Bonjour à tous,

Je souhaiterai récupérer automatiquement (sans bouton) le nom des banques avec statuts "actives" et le reporter dans la colonne B à partir de la ligne 4 et sans avoir de doublon.

Est-ce possible ce genre de requête ?? ci-joint fichier

En vous remerciant d'avance pour votre aide !
 

Pièces jointes

Solution
Voici la petite modification
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim DerLig As Long, Lig As Long
    Dim CellActive As String
    CellActive = Target.Address
    DerLig = Range("C" & Rows.Count).End(xlUp).Row
    Application.EnableEvents = False
    Range("B4:B" & DerLig).ClearContents
    If Not Intersect(Range(CellActive), Range("D4:D" & DerLig)) Is Nothing Then
        Application.ScreenUpdating = False
        Lig = 4
        For i = 4 To DerLig
            If Cells(i, "D") = "Active" Then
                Bq = Cells(i, "C")
                If Application.WorksheetFunction.CountIf(Range("B4:B" & DerLig), Bq) = 0 Then
                    Cells(Lig, "B") = Bq
                    Lig = Lig + 1
                End...
Bonjour,

En B4, formule matricielle à valider avec CTRL + SHIFT + ENTREE et à tirer vers le bas
=SIERREUR(INDEX($C$4:$C$13;PETITE.VALEUR(SI($D$4:$D$13="ACTIVE";LIGNE(INDIRECT("1:"&LIGNES($C$4:$C$13))));LIGNES($1:1));1);"")

Cdlt
 
Bonjour JHA,
Effectivement je n'avais pas fait le test avec des doublons, je propose la correction, histoire de ne pas laisser une erreur, bien que POWER QUERY soit plus adapté.
la formule corrigée (toujours à valider avec CTRL + SHIFT + ENTREE):
=SIERREUR(SI(NB.SI($B3:$B$3;INDEX($C$3:$C$13;PETITE.VALEUR(SI($D$3:$D$13="ACTIVE";LIGNE(INDIRECT("1:"&LIGNES($C$3:$C$13))));LIGNES($1:1))😉)<>0;"";INDEX($C$3:$C$13;PETITE.VALEUR(SI($D$3:$D$13="ACTIVE";LIGNE(INDIRECT("1:"&LIGNES($C$3:$C$13))));LIGNES($1:1))😉);"")

Cdlt
 
Bonjour et merci à Rouge et JHA,

Ce n'est pas exactement ce que je voulais, je sais que c'est compliqué ce que je veux mais je retente.

Je m'explique, dans le tableau j'ai le nom des banques dans la colonne C avec des doublons (normale car plusieurs clients).
Je voulais que dans la colonne B (que je masquerai par la suite), le nom des banques soit repris uniquement si le statut est " active" (sans formule plutôt avec VBA) et sans les doublons.

Exemple ici le résultat doit être :

B4 : Caisse d'épargne
B5 : HSBC
B6 : BNP
et ça s’arrête là.


En vous remerciant par avance.
Très bonne journée à vous.
 

Pièces jointes

Alors copiez ceci dans le module de la feuille (réagit à chaque intervention dans la colonne "STATUT")
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim DerLig As Long, Lig As Long
    DerLig = Range("C" & Rows.Count).End(xlUp).Row
    If Not Intersect(Target, Range("D4:D" & DerLig)) Is Nothing Then
        Application.ScreenUpdating = False
        Lig = 4
        For i = 4 To DerLig
            If Cells(i, "D") = "Active" Then
                Bq = Cells(i, "C")
                If Application.WorksheetFunction.CountIf(Range("B4:B" & DerLig), Bq) = 0 Then
                    Cells(Lig, "B") = Bq
                    Lig = Lig + 1
                End If
            End If
        Next
    End If
End Sub

Cdlt
 
Voici la petite modification
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim DerLig As Long, Lig As Long
    Dim CellActive As String
    CellActive = Target.Address
    DerLig = Range("C" & Rows.Count).End(xlUp).Row
    Application.EnableEvents = False
    Range("B4:B" & DerLig).ClearContents
    If Not Intersect(Range(CellActive), Range("D4:D" & DerLig)) Is Nothing Then
        Application.ScreenUpdating = False
        Lig = 4
        For i = 4 To DerLig
            If Cells(i, "D") = "Active" Then
                Bq = Cells(i, "C")
                If Application.WorksheetFunction.CountIf(Range("B4:B" & DerLig), Bq) = 0 Then
                    Cells(Lig, "B") = Bq
                    Lig = Lig + 1
                End If
            End If
        Next
    End If
    Application.EnableEvents = True
End Sub

Le fichier
 

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

Discussions similaires

Réponses
7
Affichages
429
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…