Copier-Coller valeurs en fonction de cellules variables

Bonjour, j'aimerais savoir si il est possible de copier et coller une valeur dans une autre feuille sachant que la valeur contenue dans cette cellule est variable en fonction d'un menu déroulant situé dans une autre cellule

Je vous joint le fichier, ce n'est pas certain que ce dernier fonctionne correctement car il est lié avec la fonction index sur une autre tableau matriciel

Je m'explique en cellule A1 de l'onglet AGENTS_CS, il y a un menu déroulant avec une liste déroulante de nom d'agents différents entre eux, et les cellules K36-L36-M36 ne seront pas les mêmes en fonction du nom de ce menu déroulant.

J'aimerais que lorsque je change de nom en cellule A1, les cellules K36-L36-M36 de cet agent soient collées sur le feuillets HS en face du nom sélectionné par rapport à la cellule A1 de l'onglet AGENTS_CS, et ainsi de suite à chaque fois que je change de nom sur le menu déroulant.

Maintenant, je ne sais pas si cela est possible.

9exemple-hs.xlsm (775.56 Ko)

Hello Snowkite,

un essai voir si cela peut te convenir.

Bonne soirée

18exemple-hs.xlsm (787.91 Ko)

Je suis désolé, mais je vois rien de différents par apport à l'original

Ce que j'aimerais c'est que les cellules K36-L36-M36 de l'onglet AGENTS_CS soient collées sur les cellules

B pour le K36

C pour le L36

D pour le M36 et ceci en face du bon nom par rapport à la cellule A1 qui est un menu déroulant

Merci

Bizarre parce que moi cela fonctionne parfaitement.

Pour exemple choisi en A1 un nom dans ta liste déroulante puis va voir dans ta feuille HS les cellules sont bien reportées.

Vraiment bizarre, car moi le fichier que tu as du modifié ressemble exactement au mien, je ne vois pas de nouveau module ou quoique ce soit.

Quand je change de nom en cellule A1, et les bien les cellules B_C_D dans l'onglet HS sont vierges

Le code n'est pas dans un module mais dans la feuille AGENT_CS.

Tu as bien activé les macros ?

Nickel, j'ai recopier ton code sur mon fichier d'origine et cela fonctionne à merveille

Encore 2 choses, est il possible :

de coller la période "cellule" D1 de l'onglet AGENTS_CS également sur l'onglet HS en cellule F en face du nom

Sur l'onglet AGENTS_CS en cellule A3, je peux changer de mois et par conséquent de période, ce qui signifie que les agents n'auront pas les même heures supplémentaires que le mois précédent. Il faudrait peux être que dans l'onglet HS, j'ai une nouvelle série en dessous de la 1ère ou là les HS s'afficheront avec la nouvelle période et ainsi de suite

Est-ce possible.

Re,

voici le code modifié pour avoir ta période en colonne F.

Si tu as plusieurs séries oui tu peux recopier tes noms une nouvelle fois la macro n'inscrira ces nouvelles données uniquement si elle retrouve le nom de l'agent en colonne A et que dans cette ligne il n'y a rien d'inscrit en colonne F. Je t'ai mis un petit message d'erreur au cas où cela se produit.

Dis moi si cela correspond à tes attentes.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nom, Periode As String
Dim Hs_Norm, HS_Ferie, HS_Nuit As Single
Dim DrLigne, A As Integer
Dim Test As Boolean

If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
    Sheets("AGENTS_CS").Calculate
    Periode = Range("D1")
    Nom = Range("A1")
    Hs_Norm = Range("K36")
    HS_Ferie = Range("L36")
    HS_Nuit = Range("M36")

    With Sheets("HS")
        DrLigne = .Range("A" & Rows.Count).End(xlUp).Row
        For A = 2 To DrLigne
            If .Range("A" & A) = Nom And .Range("F" & A) = "" Then
                .Range("B" & A) = Hs_Norm
                .Range("C" & A) = HS_Ferie
                .Range("D" & A) = HS_Nuit
                .Range("F" & A) = Periode
                A = DrLigne
                Test = True
            End If
        Next A
        If Test = False Then MsgBox "Erreur Agent non trouvé", vbCritical, "Erreur"
    End With
End If
End Sub

Bonne soirée.

Franchement le Top de chez Top, mais il y encore un léger soucis, admettons que sur l'onglet HS, je recopie la série de nom en colonne A, plusieurs fois de suite, et bien à chaque fois qu'il va reconnaître le nom, il va recopie à chaque fois les valeurs sur les cases vides (et malheureusement je suis dans l'obligation d'y retourné plusieurs fois par mois, car il y a des modifications de planning).

Il faudrait que les doublons entre les mêmes noms et les mêmes périodes soient supprimés automatiquement sur l'onglet HS

Par hasard, si un agent dans cette période venait à faire plus ou moins d'heures supplémentaires que prévus, est-ce que cela va le mettre à jour ou faut-il à chaque fois que je supprime la ligne dans l'onglet HS afin que les nouvelles heures s'affichent.

Encore merci pour ta super aide

Et j'aurais sûrement encore une ou 2 autres questions à te poser par la suite concernant les mots "congés" et "RTT" en colonne D, est-ce que cela ne te dérangeras pas

Tu trouveras ci-joint un exemple ou il y a des doublons au niveau du nom et de la période sur l'onglet HS

11exemple-hs.xlsm (852.97 Ko)

J'ai trouvé, une solution pour éliminer les doublons

Grâce à ce code

Sub SuppressionDoublons

Worksheets("HS").Range("A1:F200").RemoveDuplicates _
    Columns:=Array(1, 6), Header:=xlYes
End Sub

Pour être certains que ce dernier fonctionne correctement, aurais tu la possibilité de coller également le nom se trouvant dans le menu déroulant de l'onglet AGENTS_CS en cellule A1 sur la feuille HS en colonne A en même temps que tu copies les heures supplémentaires et la période.

Merci à toi

Bonjour,

perso mais ça ne regarde que moi j'aurais procéder ainsi :

Supprime tout tes noms en colonne A feuille HS et copie ce code dans la feuille AGENT_CS

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nom, Periode As String
Dim Hs_Norm, HS_Ferie, HS_Nuit As Single
Dim DrLigne, A As Integer
Dim Test As Boolean

If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
    Sheets("AGENTS_CS").Calculate
    Periode = Range("D1")
    Nom = Range("A1")
    Hs_Norm = Range("K36")
    HS_Ferie = Range("L36")
    HS_Nuit = Range("M36")

    With Sheets("HS")
        DrLigne = .Range("A" & Rows.Count).End(xlUp).Row
        For A = 2 To DrLigne
            If .Range("A" & A) = Nom And .Range("F" & A) = Periode Then
                If MsgBox("Période déjà trouvée pour cet agent, voulez-vous faire la mise à jour ?", vbOKCancel + vbInformation, "MAJ") = vbOK Then
                    .Range("B" & A) = Hs_Norm
                    .Range("C" & A) = HS_Ferie
                    .Range("D" & A) = HS_Nuit
                    .Range("F" & A) = Periode
                    MsgBox "MAJ effectuée", vbInformation, "MAJ"
                    A = DrLigne
                    Test = True
                Else
                    Test = True
                    A = DrLigne
                End If
            End If
        Next A
        If Test = False Then
            .Range("A" & DrLigne + 1) = Nom
            .Range("B" & DrLigne + 1) = Hs_Norm
            .Range("C" & DrLigne + 1) = HS_Ferie
            .Range("D" & DrLigne + 1) = HS_Nuit
            .Range("F" & DrLigne + 1) = Periode
            MsgBox "Période non trouvée l'ajout a été effectuée", vbInformation, "Ajout"
        End If
    End With
End If
End Sub

Bonne journée.

C'est exactement ça, est-il juste possible d'enlever les message "Période non trouvée l'ajout a été effectuée" et "Période déjà trouvée". A partir du moment ou la Période n'a pas été trouvée, l'ajout ce fait automatiquement et de même si la période a été trouvée. Car quoi qu'il arrive il faut une mise à jour

Merci

Bien sur je t'enlève l'intégralité des msgbox :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nom, Periode As String
Dim Hs_Norm, HS_Ferie, HS_Nuit As Single
Dim DrLigne, A As Integer
Dim Test As Boolean

If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
    Sheets("AGENTS_CS").Calculate
    Periode = Range("D1")
    Nom = Range("A1")
    Hs_Norm = Range("K36")
    HS_Ferie = Range("L36")
    HS_Nuit = Range("M36")

    With Sheets("HS")
        DrLigne = .Range("A" & Rows.Count).End(xlUp).Row
        For A = 2 To DrLigne
            If .Range("A" & A) = Nom And .Range("F" & A) = Periode Then
                    .Range("B" & A) = Hs_Norm
                    .Range("C" & A) = HS_Ferie
                    .Range("D" & A) = HS_Nuit
                    A = DrLigne
                    Test = True
            End If
        Next A
        If Test = False Then
            .Range("A" & DrLigne + 1) = Nom
            .Range("B" & DrLigne + 1) = Hs_Norm
            .Range("C" & DrLigne + 1) = HS_Ferie
            .Range("D" & DrLigne + 1) = HS_Nuit
            .Range("F" & DrLigne + 1) = Periode
        End If
    End With
End If
End Sub

A tester.

Je dis juste chapeau, c'est de l'excellent travail

Je reviendrais sûrement vers toi, une fois que j'aurais avancé un peu plus sur ma notion de congés et de RTT.

Encore Merci, pour ton aide.

J'aimerais juste savoir pourquoi lorsque j'ai des chiffres avec des décimales (par exemple 11,25) et bien cela me colle 11 et pas 11,25

Merci

Rechercher des sujets similaires à "copier coller valeurs fonction variables"