XL 2016 Rechercher toute une plage de données d'après une valeur

ABEAUFOUR

XLDnaute Nouveau
Bonjour,

Voilà j'ai une grande base de données avec beaucoup de références produits/Désignation/quantité/Quantité non conforme/causes de non conformité.... tout ça est par semaine (2,3,4.....30...)
Je veux créer une feuille de calculs permettant d'imprimer un "récapitulatif" de la semaine.
On entre par exemple semaine N° 18 et là tout s'affiche (c'est pour plus de simplicité pour les réunions de début de semaine)
Or je n'arrive pas a comprendre comment faire pour que lorsque j'entre le numéro de semaine, toutes mes données s'affichent dans un tableau. *

Merci par avance pour votre aide :)
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Abeaufour, bonjour le forum,

Il suffit de filtrer la colonne qui contient le numéro de semaine. Si elle n'existe pas et si tu n'as aucune date dans ton fichier, je vois mal comment tu vas t'en sortir. Quoi qu'il en soit, un fichier exemple nous permettra de mieux cerner ton problème et de te proposer une solution... Ou pas...
 

ABEAUFOUR

XLDnaute Nouveau
Je vais transférer mon fichier, en faite c'est pour avoir directement la mise en forme etc pour pouvoir imprimer.
Dans la feuille "SUIVI PAD" c'est la base de données, dans la feuille "Rapport" c'est pour l'impression du fichier condensé, là où je veux pouvoir entrer le numéro de semaine et que tout s'affiche...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Le macro événementielle Change ci-dessous devrai faire l'affaire.
le code :

VB:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Integer 'déclare la variable NL (Nombre de lignes)
'Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim LS As Integer 'déclare la variable LS (LigneS)

If Application.Intersect(Target, Range("C4:G4")) Is Nothing Then Exit Sub 'si le changement à lieu ailleurs que dans C4:G4, sort de la procédure
Range("A8:Z10").ClearContents 'efface le contenu de la plage A8:z10
Rows("10:" & Application.Rows.Count).Delete 'supprime toutes les lignes à partir de la 10ème
If Target(1, 1).Value = "" Then Exit Sub 'si la cellue est effacée, sort de la procédure
Set OS = Worksheets("SUIVI PAD") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
'NC = UBound(TV, 2)
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
    If CStr(TV(I, 2)) = CStr(Target.Value) Then 'si le numéro de semaine concorde
        ReDim Preserve TL(1 To 26, 1 To K) 'redimensionne le tableau des lignes TL (26 lignes, K colonnes)
        TL(1, K) = K 'récupère la variable K (pour le numéro de ligne) dans la ligne 1 de TL
        TL(2, K) = TV(I, 3) 'récupère la référence dans la ligne 2 de TL
        TL(3, K) = TV(I, 4) 'récupère la désignation dans la ligne 3 de TL
        TL(4, K) = TV(I, 6) 'récupère la quantité livrée dans la ligne 4 de TL
        TL(5, K) = TV(I, 7) 'récupère la quantité PAD dans la ligne 2 de TL
        For J = 6 To 26 'boucle de 6 à 26
            TL(J, K) = TV(I, J + 4) 'récupère la donnée en colonne J + 4 de TV dans la ligne J de TL
        Next J 'prochaine valeur de la boucle
        K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
'si K est égale à 1, message, sort de la procédure
If K = 1 Then MsgBox "Aucune donnée en semaine " & Target(1, 1).Value & " !": Exit Sub
LS = UBound(TL, 2) + 8 'définit les lignes LS
Range("A8:Z9").Copy 'copie la plage A8:Z9
Range("A10:Z" & LS).PasteSpecial (xlPasteFormats) 'colle les format dans la plage A10:Z...LS
'renvoie dans A8 redimensionnée le tableau TL transposé
Range("A8").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
With Range("A7").CurrentRegion 'prend em comtpe le tableau
    .VerticalAlignment = xlCenter 'allignement vertical centré
    .HorizontalAlignment = xlCenter 'alignement horizontal centré
End With 'fin de la prise en compte du tableau
Columns(3).WrapText = True 'texte envoyé à la ligne dans la colonne 3
Rows(Cells(Application.Rows.Count, "A").End(xlUp).Row + 1).Delete 'supprime la ligne après la dernière ligne éditée de la colonne A
Range("C4").Select 'sélectionne C4
MsgBox "Traitement des données terminé ! O tratamento dos dados acabou !" 'message (Aïe ! mon portugais est loin...)
End Sub

Le fichier :
 

Pièces jointes

  • Abeaufour_XD_v01.xlsm
    823.6 KB · Affichages: 6

ABEAUFOUR

XLDnaute Nouveau
Bonjour @Robert,
Désolé je n'avais pas vu votre message... Super c'est exactement ça! Comment avez-vous fait ? (Je vous demande pour pouvoir le refaire ensuite).
C'est avec Visual Basic ? Je n'ai absolument aucune notion là dessus... je vais examiner ça alors :)
 
Dernière édition:

ABEAUFOUR

XLDnaute Nouveau
Désolé de vous déranger @Robert mais je voulais savoir si vous aviez quelques informations sur les formules à utiliser, un site qui aide les gens qui ne connaissent pas Visual Basic... J'aimerais pouvoir faire seule l'ajout d'une ligne en dessous de ce que vous avez fait pour calculer les différents totaux.
Merciiiii :)
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
Bonjour @Robert ,

Dans le fichier joint, deux autres solutions. Une par filtrage avancé lancé part macro (feuille 'FiltrageAvancé') et l'autre par PowerQuery sur la feuille du même nom.
PowerQuery se trouve dans 'Récupérer et transformer d'Excel 2016 '

Cordialement
 

Pièces jointes

  • Références MEPI.xlsm
    853.1 KB · Affichages: 7

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa