Filtre d'une base de donnée par recherche de code à l'aide interface

Novice33

XLDnaute Nouveau
Bonjour le forum,

Je viens vers vous parce que je suis débutant.
J’ai un fichier nommé Carnet que j’exporte depuis mon logiciel de gestion et dont je me sers plusieurs fois par semaine.
Ma question est la suivante :
Je voudrais savoir s’il est possible de pouvoir récupérer les valeurs de toutes les colonnes en fonction de la valeur de la colonne D (sachant que dans la colonne D le même code peut être répété plusieurs fois et dans ce cas là toutes les lignes devraient pouvoir s’afficher les unes en dessous de l’autre dans le même ordre que celui du classeur Carnet.
Ensuite je voudrais savoir s’il est possible de pouvoir ajouter des valeurs dans les colonnes E et I pour la colonne E ce sera soit P1, P2 ou P3 et pour la colonne I il s’agira d’un nombre.
Comme ce n’est pas très simple à expliquer je vous fais parvenir une image de ce que je souhaiterai obtenir.
Merci d’avance.
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    56.6 KB · Affichages: 108
  • Sans titre.jpg
    Sans titre.jpg
    56.6 KB · Affichages: 113
  • Sans titre.jpg
    Sans titre.jpg
    56.6 KB · Affichages: 115
  • CARNET.xls
    97.5 KB · Affichages: 111
  • CARNET.xls
    97.5 KB · Affichages: 113
  • CARNET.xls
    97.5 KB · Affichages: 108

david84

XLDnaute Barbatruc
Re : Filtre d'une base de donnée par recherche de code à l'aide interface

Bonjour,
si tu veux faire simple, un simple filtre suffit (cf.fichier).
Maintenant il est également possible de faire comme tu le veux mais ta base de données comporte plein de lignes vides. Si tu n'en as pas expressément besoin, je te suggère de les enlever.
Je te suggère également d'enregistrer ta plage sous forme de tableau puisque tu es sous XL 2007. Tu pourras ainsi bénéficier des avantages liés aux tableaux.
Ensuite, il te faut un menu déroulant te permettant de sélectionner ton code.
Enfin, il y a plusieurs possibilités pour obtenir le résultat :
- par formule
- par filtre avancé
- par VBA (qui ne fera que reprendre la procédure du filtre avancé en l'automatisant car a priori je pense que c'est le plus simple).
Donc, indique-nous ta préférence et nettoie ta base de l'ensemble des lignes vides si tu n'en as pas besoin (si c'est le cas, reposte un nouveau fichier).
A+
 

Novice33

XLDnaute Nouveau
Re : Filtre d'une base de donnée par recherche de code à l'aide interface

Bonjour David84,
Tout d'abord merci de prendre le temps de t'être penché sur mon problème je prends note de tous tes conseils je vais essayer de modifier au mieux mon fichier et je le reposte en suivant.
Merci par avance.
A+
 

Novice33

XLDnaute Nouveau
Re : Filtre d'une base de donnée par recherche de code à l'aide interface

Bonjour David84,

comme prévu je joins le fichier modifié en ayant apporté les modifications et pour répondre à ta proposition je souhaiterai partir sur la méthode VBA.

Si tu as besoin d'autres informations je suis tout ouïe.

A+.
 

Pièces jointes

  • CARNET.xls
    96.5 KB · Affichages: 108
  • CARNET.xls
    96.5 KB · Affichages: 107
  • CARNET.xls
    96.5 KB · Affichages: 105

david84

XLDnaute Barbatruc
Re : Filtre d'une base de donnée par recherche de code à l'aide interface

Re
ci-joint une 1ère proposition. Suite à la "relecture" de ta miniature elle ne semble pas vraiment correspondre à ta demande finale mais on va la prendre comme base de départ, quitte à la modifier par la suite, mais au moins en partant d'un fichier et non d'une image c'est plus facile d'avancer.
Comme tu es sous XL 2007, j'ai utilisé des méthodes propres aux tableau dans mon code (RemoveDuplicate) et ai enregistré ta plage en tant que Tableau avec une ligne de sous-totaux.
Création d'un onglet Liste regroupant la liste des codes triée et sans doublon.
Onglet Carnet : le menu déroulant en A2 te permet de sélectionner un code et le tri est effectué au sein du tableau. Pour faire apparaître l'ensemble du tableau, cliquer sur le bouton "Afficher tout".
Ceci-dit, si tu veux que la sélection apparaisse dans un autre onglet, c'est possible.
Pour le reste, je n'ai pas compris pour l'instant ce que tu attends.
Teste et dis-moi ce qu'il en est en expliquant concrètement ce que tu attends.
Dernier point : de ton côté, fait l'effort de te documenter sur :
- les tableaux dans XL 2007 (cf. articles et vidéos de démonstration ici , notamment : Démo : Organiser vos données en utilisant un tableau Excel
ou en faisant une recherche sur ce site avec les mots clés),
- le filtre avancé (élaboré pour les versions antérieures :
=>filtre élaboré).
A+
 

Pièces jointes

  • CARNET_Novice33.xlsm
    57.7 KB · Affichages: 87
Dernière édition:

david84

XLDnaute Barbatruc
Re : Filtre d'une base de donnée par recherche de code à l'aide interface

Re
ci-joint nouvelle proposition correspondant plus à ta demande et plus opérationnelle :
- on ne passe plus par un filtre avancé mais par un tri effectué via un tableau VBA
- plus d'onglet Liste
- le menu déroulant est géré via un comboBox
- l'extraction du code choisi est effectuée dans un autre onglet ("Extraction")
- code opérationnel sur toutes les versions d'Excel
A+
 

Pièces jointes

  • CARNET_Novice33.xls
    169 KB · Affichages: 206

david84

XLDnaute Barbatruc
Re : Filtre d'une base de donnée par recherche de code à l'aide interface

Re re,
Une autre solution possible pour la macro traitant de l'extraction en passant par Find (logiquement plus rapide mais difficile de s'en rendre compte sur le fichier fourni) :
Code:
Sub Extraction2()
Dim Tablo, Tabl(), Nb As Byte, i&, j&, c As Range
Application.ScreenUpdating = False
Set Tablo = Sheets("Base_données").[A2].CurrentRegion.Offset(1, 0)
Set Tablo = Tablo.Resize(Tablo.Rows.Count - 1)
Nb = Application.CountIf(Sheets("Base_données").Range(Cells(3, 4), Cells(Tablo.Rows.Count + 2, 4)), ComboBox1.Value)
Sheets("Extraction").Range("A2:O" & Tablo.Rows.Count).ClearContents
Set champ = Sheets("Base_données").Range(Cells(2, 4), Cells(Tablo.Rows.Count + 2, 4))
 Set c = champ.Find(Me.ComboBox1, LookIn:=xlValues, LookAt:=xlWhole)
 If Not c Is Nothing Then
    premier = c.Address
    i = 1
    Do
      For j = 1 To Tablo.Columns.Count
                    ReDim Preserve Tabl(1 To Nb, 1 To Tablo.Columns.Count)
                    Tabl(i, j) = Sheets("Base_données").Cells(c.Row, j).Value
                Next j
            i = i + 1
        Set c = champ.FindNext(c)
    Loop While Not c Is Nothing And c.Address <> premier
  End If

 With Sheets("Extraction")
    For i = 1 To Nb
        For j = 1 To Tablo.Columns.Count
            .Cells(i + 1, j) = Tabl(i, j)
        Next j
    Next i
  End With
Application.ScreenUpdating = True
End Sub

Dans le
Private Sub ComboBox1_DropButtonClick()
remplacer
Call Extraction
par
Call Extraction2

A+
 

Discussions similaires

Réponses
12
Affichages
400

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 504
Messages
2 089 070
Membres
104 018
dernier inscrit
Mzghal