Copier plage de valeur sur une autre feuille selon 1 critère Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
s
sylvainpyc
Membre habitué
Membre habitué
Messages : 90
Inscrit le : 14 octobre 2014
Version d'Excel : 2007 fr

Message par sylvainpyc » 25 octobre 2019, 09:54

Bonjour,

J'ai besoin d'aide svp pour recopier des plages de cellules d'une feuille à une autre

Je m'explique

Voici ci joint un classeur avec 2 feuilles de calculs

- "2020" : planning des salariés annuel => dans la colonne A on trouve le numéro de semaine (le planning tourne sur 4 semaines, donc de 1 à 4) - en colonne B on retrouve le numéro de semaine de l'année

- Trame de base sur 4 semaines (n° de semaine de 1 à 4 dans la colonne D)

Je voudrais recopier dans la feuille "2020" les valeurs de la feuille "trame de base" selon le numéro de semaine (de 1 à 4 )

Par exemple :
Dans A3 de la feuille "2020" est noté 2
Donc recopier dans les cellules I3:CA9 de "2020"
les valeurs des cellules I10:CA16 de la feuille "Trame de base" car la valeur de D10 est 2 comme la valeur recherchée

Puis
Dans A10 de la feuille "2020" est noté 3
Donc recopier dans les cellules I10:CA16 les valeurs des cellules I17:CA23 car la valeur de D17 est 3 comme la valeur recherchée

Puis pour toute l'année

Pourriez vous m'aider svp ?
J'ai essayé avec des formules mais je me perds
J'essaie en vba mais je ne trouve pas la bonne méthode

Je vous serais très reconnaissant

Cordialement
test1.xlsm
(909.71 Kio) Téléchargé 2 fois
m
m3ellem1
Membre impliqué
Membre impliqué
Messages : 1'885
Appréciations reçues : 166
Inscrit le : 18 décembre 2018
Version d'Excel : 2016

Message par m3ellem1 » 25 octobre 2019, 23:08

Slt sylvainpyc, slt le Forum :appl2:

un essai
Sub CopierPlage()
    Dim s As Long
    Dim wrsSource As Worksheet
    Dim wrsTarget As Worksheet

    Set wrsSource = Worksheets("Trame de base")
    Set wrsTarget = Worksheets("2020")
    Application.ScreenUpdating = False

    With wrsSource
        For s = 10 To .Cells(Rows.Count, "D").End(xlUp).Row Step 7

            .Range("I" & s & ":CA" & s + 6).Copy wrsTarget.Range("I" & s - 7)
        Next s
    End With

    Application.ScreenUpdating = True
End Sub
Bonne nuit
À partir d'hier, j'ai décidé de ne plus expliquer les solutions proposées et de ne plus répondre aux MP!
s
sylvainpyc
Membre habitué
Membre habitué
Messages : 90
Inscrit le : 14 octobre 2014
Version d'Excel : 2007 fr

Message par sylvainpyc » 5 novembre 2019, 07:44

bonjour,

j'étais en vacances, je n'ai pas pu regarder avant, l'ordi est au travail

Je vous remercie de votre aide

Votre code fonctionne mais ne remplit que les 3 premières semaines de la feuille 2020 (semaine 2,3 et 4 mais pas la semaine 1)
comme sur le fichier ci joint

Je ne comprends pas votre code => pourries vous svp m'expliquer votre code?
Pour avoir la semaine 1 j'ai essayé de corriger s=10 par s=3
For s = 10 To .Cells(Rows.Count, "D").End(xlUp).Row Step 7
mais j'ai un message d'erreur

Comment faire svp pour reproduire ce code sur toute la feuille 2020 en prenant en compte les 4 semaines ?

PS : j'ai sur ce classeur une nouvelle feuille qui se nomme "conges"
J'essaie de récupérer sur chaque ligne le nom du salarié, la date de début et de fin et d’insérer les congés dans la feuille 2020 en insérant le type (ca ou cs ou ...) à la place des horaires.
J'ai commencé mon code mais ca ne fonctionne pas encore
Sub conges()
Derlig = 0
Sheets("Conges").Activate
    Derlig = Range("A" & Rows.Count).End(xlUp).Row
    MsgBox Derlig
        For i = 4 To Derlig
            nom = Cells(i, 1)
            typ = Cells(i, 2)
            Ddeb = Cells(i, 3)
            Dfin = Cells(i, 4)
            Call EnregConges(nom, typ, Ddeb, Dfin)
        Next i
End Sub

Sub EnregConges(nom, typ, Ddeb, Dfin)
MsgBox nom & " - " & typ & " - " & Ddeb & " - " & Dfin
Sheets("2020").Activate
    
    Set Plage2 = ThisWorkbook.Worksheets("2020").Range("d3:d53")
        For Each cell In Plage2
            If cell.Value >= CDate(Ddeb) And cell.Value <= CDate(Dfin) Then
                col1 = cell.Column
                col = Mid(cell.Address, 2, InStr(2, cell.Address, "$") - 2)
                lig = cell.Row
                MsgBox cell.Value & " - " & cell.Row & " - " & col1 & " - " & lig
                cell(lig, col1 + 5).Select
                cell(lig, col1 + 5) = 2
            End If
        Next

End Sub
Si vous pourriez me guider svp, je vous serais très reconnaissant

Je vous remercie beaucoup de votre aide précieuse

Cordialement
test1.xlsm
(926.83 Kio) Téléchargé 1 fois
s
sylvainpyc
Membre habitué
Membre habitué
Messages : 90
Inscrit le : 14 octobre 2014
Version d'Excel : 2007 fr

Message par sylvainpyc » 5 novembre 2019, 07:56

Re

J'ai ajouté dans la feuille trame de base la semaine 1 après la semaine 4
Ce qui permet de rajouter la semaine 1 dans la feuille 2020
Je voudrais maintenant reproduire ce code pour toute l l'année de la feuille 2020.

PS : je voudrais si possible que soit vérifié que le numéro de semaine de la colonne A de la feuille 2020 corresponde au numéro de semaine de la colonne D de la feuille trame de base => en cas de changement des numeros de semaine de la colonne D de 2020 alors que les valeurs soient modifiés selon le numéro de semaine de la trame de base
Par exemple si je modifie en A3 de la feuille 2020 le numéro de semaine (par ex 3 au lieu de 2, que les horaires soient mis à jour et correspondent à la semaine 3 de la trame de base)

Je vous remercie beaucoup

Cordialement
test1.xlsm
(960.53 Kio) Pas encore téléchargé
s
sylvainpyc
Membre habitué
Membre habitué
Messages : 90
Inscrit le : 14 octobre 2014
Version d'Excel : 2007 fr

Message par sylvainpyc » 8 novembre 2019, 17:16

Bonjour,

J'ai réglé mon pb pour insérer les congés dans ma feuille 2020

Mais je n'arrive pas à régler le premier pb :
J'ai ajouté dans la feuille trame de base la semaine 1 après la semaine 4
Ce qui permet de rajouter la semaine 1 dans la feuille 2020
Je voudrais maintenant reproduire ce code pour toute l l'année de la feuille 2020.
c'est à dire recopier dans la feuille "2020" les semaines de la feuille "trame de base" en respectant la règle suivante :
que le numéro de semaine de la colonne A de la feuille "2020" corresponde au numéro de semaine de la colonne D de la feuille "trame de base"

Pourriez vous m'aide svp ?

Je vous remercie beaucoup

Cordialement
test34.xlsm
(867.67 Kio) Téléchargé 3 fois
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message