Recherche date puis copier coller la ligne

Bonjour

j'ai une base de données composée des salariés de l'usine, chaque employé avec différents détails (mois du salaire, salaire de base, primes, ancienneté, etc.), chaque employé est répété sur 12 lignes,

je souhaite faire un code VB, qui me permet de rechercher la cellule contenant la date correspondant au mois X, ensuite il copie/colle toute la ligne dans une autre feuille, de telle sorte avoir la liste des employés et leur salaire pour chaque mois séparés

Merci

Bonjour,

La date se trouve dans quelle colonne et sous quel format ?

RE

c'est de la forme 201601: c'est le mois de Janvier 2016, j'ai rattaché le fichier avec cette discussion pour être plus claire

En faite je vais créée 12 feuilles correspondants aux 12 mois, et chaque feuille comprendra la liste des salariés correspondants au mois de la feuille

Merci


24salairestest.zip (4.25 Ko)

Re,

Visiblement, invisiblement devrais-je plutôt dire, ton fichier n'est pas passé... 201601 ! Est-tu sûre que c'est un format de date ou bien juste ta manière à toi d'exprimer cette date ? Un fichier exemple serait vraiment le bienvenu...

Re

si je l'ai rattaché,

Merci

Re,

En piece jointe ton fichier avec le code ci-dessous :

Sub Macro2()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim OD As Worksheet 'déclare la variable OD (Onglet de Destination)
Dim TL() As Variant 'déclare la variable O (Tableau des Lignes)

Set O = Worksheets("sal   2016") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = TV(I, 1) 'alimente le dictionnaire D avec les données en colonne 1 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    K = 1 'initialise la variable K
    Erase TL 'vide le tableau TL
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set OD = Sheets(Right(TMP(J), 2)) 'définit l'onglet OD (génère une erreur si cet onglet n'existe pas)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Sheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position dans le classeur
        ActiveSheet.Name = Right(TMP(J), 2) 'renomme l'onglet avec les deux derniers caractères de la date (=le mois)
        Set OD = ActiveSheet 'définit l'onglet OD
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    OD.Cells.ClearContents 'efface le contenu de l'onglet OD
    OD.Range("A1").Resize(1, UBound(TV, 2)).Value = Application.Index(TV, 1) 'renvoie dans A1 redimensionnée de l'onglet OD, la premiere ligne du tableau des valeurs TV (les en-têtes)
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If CStr(Right(TV(I, 1), 2)) = OD.Name Then 'condition : si les deux derniers caractères de la donnée ligne I colonne 1 de TV correspondent au nom de l'onglet OD
            ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes TL (autant de lignes que TV a de colonnes, K colonnes)
            For L = 1 To UBound(TV, 2) 'boucle 3 : sur toutes les colonnes du tableau des valeurs TV
                TL(L, K) = TV(I, L) 'récupère dans la ligne L de TL, la valeur de la donnée en colonne L de TV (= Transposition)
            Next L 'prochaine colonne de la boucle 3
            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 2
    'si K est supérieure à 1, renvoie dans A2 redimensionnée de l'onglet OD le tableau TL transposé
    If K > 1 Then OD.Range("A2").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
Next J 'prochaine élément de la boucle 1
End Sub

Le fichier :

30trader-v01.xls (15.00 Ko)

Re

Ca marche, merci beaucoup pour votre aide

As

Rechercher des sujets similaires à "recherche date puis copier coller ligne"