Copier/coller des cellules sur feuille de synthèse hebdo

Bonjour,

Je cherche à finaliser une macro que j'ai bricolée à partir de divers éléments trouvés sur internet et de ce que j'en ai compris (je n'ai aucune connaissance en VBA).

La macro vise à récupérer le contenu d'une plage de cellules (K22:K45) de la feuille "Calcul horaires" et à les coller sur la feuille "Synthèse" puis à réinitialiser les cellules K22:K45 (je suis arrivé à quelque chose qui fonctionne jusque là) dans le but de pouvoir y saisir d'autres données à copier/coller à leur tour sur la feuille de synthèse à droite des précédentes à chaque activation de la macro.

Mes tentatives de boucle ont été infructueuses, je vous livre donc ma macro incomplète :

Sub synthese()
'
' synthese Macro
'
    Dim x As Integer

  Application.ScreenUpdating = False  
x = 1
  With Sheets("Synthèse")

    ActiveSheet.Range("K22:K45").Copy
    .Cells(2, x + 1).PasteSpecial Paste:=xlPasteValues

    .Cells(1, x + 1).Value = "Semaine" & x
    x = x + 1

End With
'
' Effacement K22:K45 une ligne sur deux car j'ai fusionné des cellules en colonne A et K.  
' Les lignes paires des colonnes B à J (concernées par les actions ci-dessous) contiennent des lites déroulantes affichant une valeur
' dans les lignes impaires intercallées de 23 à 45.
    ActiveSheet.Range("B22:J22").Value = " "
    ActiveSheet.Range("B24:J24").Value = " "
    ActiveSheet.Range("B26:J26").Value = " "
    ActiveSheet.Range("B28:J28").Value = " "
    ActiveSheet.Range("B30:J30").Value = " "
    ActiveSheet.Range("B32:J32").Value = " "
    ActiveSheet.Range("B34:J34").Value = " "
    ActiveSheet.Range("B36:J36").Value = " "
    ActiveSheet.Range("B38:J38").Value = " "
    ActiveSheet.Range("B40:J40").Value = " "
    ActiveSheet.Range("B42:J42").Value = " "
    ActiveSheet.Range("B44:J44").Value = " "

Application.CutCopyMode = False   
End Sub

Bonjour et bienvenue sur le forum

Un essai. Te convient-il ?

27essai-v1.xlsm (24.57 Ko)

Bonjour,

Merci pour ta réactivité.

La macro fait exactement ce que j'avais décrit dans mon message.

J'avais cependant omis quelques détails comme le fait que la colonne 1 de la feuille de Synthèse devait rester libre ou celui que la plage K22:K45 contenait des formules.

J'ai donc apporté des modifications de bricolo du mercredi à ta macro et cela semble fonctionner.

Si mes bricolages ne heurtent pas ta sensibilité de programmeur, ce sujet pourra être clos.

Encore merci et bonne fin de journée,

David

Sub Lancer()

    Dim x As Integer

    Application.ScreenUpdating = False

    With Sheets("Synthèse")
        ActiveSheet.Range("A22:A45").Copy               'Voilà les données à reporter 
        .Cells(2, 1).PasteSpecial Paste:=xlPasteValues  ' dans la colonne 1.
        x = .Cells(1, Columns.Count).End(xlToLeft).Column
        If .Cells(1, Columns.Count).End(xlToLeft).Value <> "" Then x = x + 1
        ActiveSheet.Range("K22:K45").Copy
        .Cells(2, x).PasteSpecial Paste:=xlPasteValues
        .Cells(1, x).Value = "Semaine " & x-1 'Pour pouvoir écrire dans la colonne 1
        'x = x + 1
    End With

    'Effacement K22:K45 une ligne sur deux car j'ai fusionné des cellules en colonne A et K (la 22 et la 23, etc...) : cet effacement visait à réinitialiser les cellules B22:J44 comme ce que j'avais fait et que tu as corrigé plus bas
    'Range("K22:K45").ClearContents : pas besoin si je veux garder mes formules dans les cellules de la plage

    ' Les lignes paires des colonnes B à J (concernées par les actions ci-dessous) contiennent des lites déroulantes affichant une valeur
    ' dans les lignes impaires intercalées de 23 à 45.
    For x = 22 To 44 Step 2
        Range(Cells(x, "B"), Cells(x, "J")) = "" 'j'ai enlevé l'espace inutile dans la cellule  :oops: 
    Next x

Application.CutCopyMode = False
End Sub

Tu écris :

Si mes bricolages ne heurtent pas ta sensibilité

Je suis grand, majeur et vacciné. Que veux-tu qui me heurte ?

Si cela te va, cela me va aussi : la macro est pour toi !

Bye !

Je me suis peut-être un peu avancé sur mon désir de clore ce sujet car j'ai une nouvelle question que je vais quand même poser car elle est imbriquée dans ma démarche.

En fait, à chaque lancement de la macro, une colonne contenant les valeurs de K22:K45 est créée dans ma page de Synthèse.

J'aurais souhaité pouvoir faire des sommes partielles sur chaque ligne mais comme le nombre de colonnes augmente, je suis bloqué.

Il faudrait que les colonnes crées par la macro soient insérées successivement comme c'était déjà le cas, mais après la colonne A et avant la colonne sommant les données.

Pour couronner le tout, mes valeurs de K22:K45 sont dans un format texte de type 2h30mn et comme je veux récupérer un format numérique (pour pouvoir additionner), j'ai essayé la formule suivante =1*STXT(B2;LIGNE($1:$2);1)+1*STXT(B2;LIGNE($3:$4);2)/60, et elle fonctionne sauf que... ce n'est pas du VBA et surtout je suis incapable de l'intégrer à ma macro.

Était-ce une bonne idée de faire un collage spécial lors du collage des valeurs contenues en K22:K45 (obtenues pour K22 avec la formule =ENT(SOMME(B23:J23))&"h"&ENT((SOMME(B23:J23)-ENT(SOMME(B23:J23)))*60)&"mn") ?

Ou bien serait-il plus à propos de n'utiliser dans la macro que la partie SOMME(B23:J23) et éviter une autre conversion ?

Dans tous les cas, je suis incompétent et si tu as du temps pour les défis, en voici un.

En te remerciant pour tout le travail accompli pour moi aujourd'hui,

David

Rechercher des sujets similaires à "copier coller feuille synthese hebdo"