Remplir différents tableaux en fonction d'un critère

Bonjour tout le monde,

J'ai fait ce code qui me permet de copier/coller les informations de la feuille "Listing" pour les mettre dans la feuille "Rémunérations" mais je n'arrive pas à les inclure dans le tableau correspondant à leur section (information que l'on obtient par la feuille "Listing").

Sachant que les tableaux que je vais remplir ne sont pas identiques (juste le nombre de lignes est différent) mais la mise en forme est identique.

Pourriez-vous m'aider à compléter mon code s'il vous plaît ?

Merci pour votre aide.

15test-rh.xlsm (39.12 Ko)
Sub test_RH()
Dim i As Long
Dim j As Long
Dim cpt As Long

cpt = 0
i = 2
j = 3

Do While Sheets("Listing").Range("A" & i).Value <> ""
    If Sheets("Listing").Range("A" & i).Value = Sheets("Parametre").Range("CTRE_BP20").Value Then
        If Sheets("Listing").Range("B" & i).Value <> Section Then

        If j <> 0 Then
            Sheets("Rémunérations").Range("B" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("C" & i).Value   'Matricule
            Sheets("Rémunérations").Range("C" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("D" & i).Value   'Nom
            Sheets("Rémunérations").Range("D" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("E" & i).Value   'Prénom
            Sheets("Rémunérations").Range("E" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("F" & i).Value   'Fonction
            Sheets("Rémunérations").Range("F" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("G" & i).Value   'Nature Ctat
            Sheets("Rémunérations").Range("G" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("H" & i).Value   'ETP prév
            Sheets("Rémunérations").Range("H" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("I" & i).Value   'Présence prév
            Sheets("Rémunérations").Range("I" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("J" & i).Value   'SB mensuel
            Sheets("Rémunérations").Range("J" & j).Offset(cpt, 0).Value = Sheets("Listing").Range("K" & i).Value   'Complément SB
            Sheets("Rémunérations").Range("U" & j).Offset(cpt, 0).Value = "Mensuel"
            cpt = cpt + 1
        End If
    End If
    i = i + 1
Loop
End Sub

Salut Cleme,

premier jet, trop peu d'infos quant aux manipulations successives des données.

J'ai légèrement modifié ta feuille 'Rémunérations'.
- colonne [A:A] effacée ;
- Titres de section scindés sur deux colonnes [B:C] afin de récupérer l'intitulé "Section X" seul pour faciliter la recherche.

Un double-clic n'importe où en 'Listing' démarre la macro.
J'ai supposé que les données de 'Listing' devaient être effacées après répartition dans les sections adéquates. Oui ? Non ?
Si "Non", alors, il faudra prévoir un marqueur "Donnée traitée" quelque part sur la ligne.

Pour la suite, j'imagine que les données vont s'accumuler dans les diverses sections de 'Rémunérations' ? Oui ? Non ?
Il faudra alors prévoir d'insérer de nouvelles lignes pour les accueillir...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim sWk As Worksheet, rCel As Range
'
Cancel = True
Set sWk = Worksheets("Rémunérations")
'
Application.ScreenUpdating = False
'
On Error Resume Next
With Worksheets("Listing")
    If .[A2] <> "" Then
        For x = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
            If .Range("A" & x).Value = Worksheets("Parametre").Range("CTRE_BP20").Value Then
                Set rCel = sWk.Columns(2).Find(what:=.Range("B" & x).Value, lookat:=xlWhole, LookIn:=xlValues)
                If Not rCel Is Nothing Then
                    Set rCel = rCel.End(xlDown).Offset(1, 0)
                    sWk.Range("B" & rCel.Row).Resize(1, 9).Value = .Range("C" & x).Resize(1, 9).Value
                    sWk.Range("U" & rCel.Row).Value = "Mensuel"
                    .Rows(x).Delete shift:=xlUp
                End If
            End If
        Next
        sWk.Activate
    End If
End With
On Error GoTo 0
'
Application.ScreenUpdating = True
'
End Sub


A+

12test-rh.xlsm (42.35 Ko)

Merci curulis pour la macro.

En fait ce code va se trouver dans un macro plus complète qui va remplir chaque onglet d'un fichier grâce à des éléments pris de différents fichiers.

Les données de "Listing" se trouveront donc dans un autre fichier que l'onglet "Rémunérations". J'ai regroupé les deux feuilles par souci de compréhension.

De ce fait les données de "Listing" ne devront pas s'effacer.

En ce qui concerne le nombre de lignes, les tableaux que l'on a créés ont logiquement le nombre de lignes nécessaires.

Les informations que je viens de te donner vont-elles amenées des modifications sur le code que tu viens de faire ?

Hey curulis57,

Je reviens vers toi car j'ai voulu copier ta macro dans mon module mais lorsque je souhaite lancer la macro j'ai une fenêtre de Macros qui s'ouvre.

As-tu une solution à ce problème ?

Salut Cleme,

Effectivement, la situation telle que tu la présentes va entraîner un certain nombre de modifications au code.
Il est nécessaire d'expliquer en détail les actions souhaitées :
- nom et emplacement des différents fichiers dont tu parles ;
- qui fait quoi exactement : ta prose ne nous laisse aucune précision !

La macro est une macro événementielle : elle réagit donc à un événement, ici un double-clic .

Private Sub Worksheet_BeforeDoubleClick

Bref, elle doit donc se trouver telle quelle dans le module de la feuille où se passe l'événement.
On peut faire autrement mais, ne connaissant pas ton niveau, on va peut-être d'abord s'attacher à la compréhension de l'ensemble de ta demande.

Á toi de nous expliquer en détail comment les opérations doivent se dérouler VRAIMENT !


A+

Alors curulis57,

Je vais essayé d'être le plus clair possible.

Un fichier nommé "Duplication modèle" va porter toutes les macros que j'ai faite dont celle qui me pose problème que j'ai posté sur ce sujet.

Sur ce classeur, un bouton va m'ouvrir un UserForm me permettant de choisir les fichiers souhaités (RH, Budget, Amortissement,..). Ces fichiers me permettront d'alimenter les onglets souhaités du fichier "Matrice BP21" nommé "FichMat" dans mes macros

Ici notre fichier comportant la feuille "Listing" s'appelle "Modèle RH BP21" qui est renommé dans la macro "FichRH".

Les données de "Listing" vont donc venir alimenter l'onglet "Rémunérations" du fichier "Matrice BP21".

J'espère être plus clair à présent. N'hésite pas à me demander de plus ample explications si nécessaire

J'espère que j'ai été plus clair curulis57.

N'hésite pas à me contacter si tu as besoin de plus d'informations

Rechercher des sujets similaires à "remplir differents tableaux fonction critere"