Copier/coller avec choix de la source et destination

Bonjour au forum,

Voici plusieurs jours que je cherche à créer un code me permettant d'effectuer un copier d'une plage de cellules via une liste déroulante pour la coller à un autre endroit de la feuille, en sélectionnant également par liste déroulante la destination.

Sur le fichier joint, il y a sur la gauche les semaines "Chablon", qui définissent les horaires de mon équipe sur l'année, et qui fonctionne sur un tournus de 48 semaines.

Sur la droite, les semaines de l'année, comportant donc 52 semaines (et même parfois 53).

Je cherche donc à pouvoir dire à la macro :

Copie à partir de la semaine n°1 du chablon (donc de la semaine 1 à 48) et colle ces horaires à partir de la semaine n°6 sur les horaires "année".

Le problème est qu'il faudrait que dès que le collage arrive en semaine n°52 des colonnes "année", il reparte à partir de la semaine n°1 pour continuer le collage.

Cela me semble impossible à faire, surtout en considérant que certaines années il y a 53 semaines....

C'est pourquoi je réfléchi sur un code me permettant d'afficher 2 listes déroulantes, avec "Semaine Chablon à copier" et une autre avec "Semaine année où coller".

Malheureusement, même là-dessus je coince complètement...

Auriez-vous l’amabilité de m'aider ?

Un tout grand merci d'avance.

Nico.

Bonjour

Avec un exemple, ce serait plus clair...

Bye !

Bonjour.

C'est tout à fait possible.

i = 6

Pour semaine chablon de 1 à 48

Si Semaine(i) existe on copie, sinon i = 1

i++

Next semaine chablon

A mettre en VBA.

Bonjour Gmb, Elhevan,

Merci pour vos réponses.

@Gmb : pour un exemple concret, sur le fichier joint, il faudrait que la semaine 1 du chablon (donc à gauche) se colle sur la semaine 42 des horaires de l'année (donc à droite), et ainsi de suite jusqu'à la semaine 48 du chablon (qui correspond à la semaine 36 des horaires de l'année).

Ensuite, pour les semaines suivantes de l'année (de 37 à 52), il faudrait donc que la copie reparte de la semaine 1 du chablon (donc copie de la semaine 1 du chablon pour coller sur la semaine 37 des horaires de l'année, etc.)

Autre difficulté, il faudrait que je puisse avoir le choix d'où commencer le collage, car évidemment, chaque année sera décalée (l'horaire chablon 1 ne devra pas être systématiquement collé dans la semaine 42 des horaires de l'année).

J’espère que c'est plus clair, ce n'est pas évident à expliquer

@Elhevan : je suis relativement débutant en VBA et je dois avouer que je ne suis pas vraiment capable de créer un code comme cela

Si tu as le temps et l'envie, je serais ravi que tu m'aide à construire ce code... !

Merci de votre aide en tout cas.

Nico.

Un essai à tester. Te convient-il ?

Bye !

Merci d'avoir pris de ton temps pour m'aider.

Au lancement de la macro, j'ai eu une erreur de variable non définie pour l'argument "lgn".

J'ai donc rajouté une déclaration "Dim lgn As Range" et la macro s'est lancée.

Lors du choix de la semaine, une erreur apparait : "Erreur d'exécution 91 : Variable objet ou variable de bloc With non définie"

Cela concerne apparemment la ligne :

lgn = ln - 3 + UBound(tabloB, 1) + 1

As-tu une idée ?

Re,

Au fait j'ai supprimer ce que j'avais ajouté "Dim lgn As Range" et simplement rajouté "lgn" à la suite des déclaration et cela fonctionne.

Il subsiste cependant toujours un problème au niveau des WE lors de la copie, certaines postes sont copiés plusieurs fois (un poste se colle sur plusieurs lignes)

En tout cas cela semble parfaitement répondre à ma demande, c'est impressionnant... !

Nrev74 a écrit :

Il subsiste cependant toujours un problème au niveau des WE lors de la copie, certaines postes sont copiés plusieurs fois (un poste se colle sur plusieurs lignes)

Peux-tu joindre un fichier avec cette anomalie et me dire comment tu l'as obtenu ?

Bye !

Bonjour Gmb,

Je m'excuse d'avance car j'ai effectué quelques changements sur l'ordre des semaines car je me suis rendu compte au final que ce n'était pas vraiment intuitif.

J'ai donc mis la semaine n°1 des horaires "Semaine" en face de la semaine n°1 des horaires "Chablon" (et forcément, lors du choix de la semaine dans l'userform cela ne fonctionne plus ).

Sur le fichier joint, j'ai créé 3 feuilles :

- Chablon :

Celle que tu as créé, l'originale. Lorsque tu choisis n'importe quelle semaine, le collage fonctionne, en partie.

Tu verras que les colonnes des samedis et dimanches comportent plusieurs fois les mêmes horaires.

Concernant l'ordre de collage, c'est difficile à évaluer car il y a trop de tableaux "Semaine", j'ai dû faire une mauvaise manip lorsque j'ai envoyé la 1ère version du fichier, ce qui a dû t'induire en erreur, je m'excuse encore pour cela.

Il y a également un problème lors de la copie, car le code écrase mes cellules où l'année est renseignée ainsi que les 2 lignes du dessous où se trouve les jours de semaine et les dates calculées selon une formule.

- Chablon Save :

Telle que je la souhaiterais. C'est une "sauvegarde" de la feuille suivante "Chablon Test" pour que tu puisses la recopier si les tests ont des actions irréversibles.

- Chablon Test :

Une copie de la feuille Save pour que tu puisses tester.

Lors du choix de la semaine dans l'userform, il y a une erreur de code (à cause des modifs que j'ai faites probablement ).

Il faudrait que mes cellules comportant l'année, les jours de la semaine et les dates soient conservées.

Concernant le collage, je réexplique au cas où :

Il y a 48 semaines dans le chablon, et 52 (ou 53 selon l'année) dans les "Semaines".

Au fur et à mesure des années, il y a forcément un décalage entre les 2.

Pour exemple, dans les colonnes Y et Z, j'ai mis un tableau qui explique quelles semaines du chablon seraient à coller dans les horaires "Semaines" pour l'année 2017.

L'important, et le but de la macro, est que je puisse avoir mes horaires "Semaine" de 1 à 52 (ou 53) renseignées par les semaines du chablon (dès que l'on arrive à la semaine n°48 du chablon, il faut donc recommencer en collant la semaine 1 du chablon).

J'apprécie vraiment ton aide et ton implication mais je comprendrais très bien que tu veuilles lâcher l'affaire étant donné la difficulté de la chose...

En te remerciant

Nico.

Bonjour

Je crois que le fichier joint n'a pas suivi.

Peut-être est-il trop gros (> 300 ko) ? Dans ce cas, passe par http://www.cjoint.com

Bye !

Re,

Effectivement le fichier >600 Ko.

Voici l'adresse du lien :

Désolé mais je ne peux pas ouvrir ton fichier. J'ai le message :

capture

Bye !


Je l'ai uploadé de nouveau, malheureusement je suis au travail et le site de téléchargement de lien est bloqué ic, je ne peux pas tester si cela fonctionne...

C'est pareil, impossible d'ouvrir le fichier...

Bye !

C'est très étrange, j'ai essayé plusieurs fois et effectivement, impossible à télécharger...

Accepterais-tu que je t'envoie le fichier par e-mail ?

Fais l'essai...

Bye !

Bonjour Gmb,

Je t'ai envoyé un message en mp mais apparemment tu ne l'as pas reçu.

Je te signalais qu'il n'y avait pas la possibilité d'ajouter un fichier joint par mp

J'ai du coup créé 3 fichiers distincts, correspondant aux 3 feuilles que j'ai décris précédemment, en espérant que cela fonctionne...

Excellent WE à toi

Nico.

23chablon.xlsm (178.98 Ko)
22chablon-save.xlsm (218.03 Ko)
32chablon-test.xlsm (238.14 Ko)

Bonjour

J'ai enfin pu ouvrir les fichiers et reconstituer le fichier initial

Mais je relève une anomalie : tu as mis en "Chablon Save" le résultat souhaité.

et sur la feuille "Chablon Test" en colonnes Y et Z les correspondances des semaines pour 2017.

Or, si je fractionne l'écran pour voir, par exemple, en même temps les semaines 12 de Chablon et la semaine 1 de "Semaines", on voir que ce ne sont pas les mêmes ....

Du coup, je ne sais plus comment faire !

En espérant que ce fichier s'ouvre. Pour avoir plus de chance , je l'ai compressé avec Zip :

Bye !

Bonjour Gmb,

Je conviens que ce n'est pas très clair....

Sur le fichier joint, je t'ai mis un maximum d'explication, je pense que ce sera beaucoup plus clair

https://www.cjoint.com/c/FGqwZylG3MO

Merci de ton aide.

Nico.

bonsoir

dit moi si ca fonctionne ::

1-La méthode copy /paste :

Relativement lente

Vous pouvez personaliser cette methode selon votre besoin

xlPasteAll => Tout sera collé.

xlPasteFormulas => Les formules sont collées.

xlPasteValues => Les valeurs sont collées.

Option Explicit

Private Sub CommandButton1_Click()

Dim i As Integer, nb As Integer, counter As Integer, Strt As Integer
Dim x As Integer
If ComboBox1.ListIndex = -1 Or ComboBox2.ListIndex = -1 Then
MsgBox "Veuillez compléter les choix "
Exit Sub
End If
'Sheets("Chablon").Unprotect
counter = 0
i = ComboBox1.ListIndex
x = ComboBox1.ListIndex

nb = ComboBox2.ListIndex + 52
'MsgBox "i = " & i & " x = " & x & " nb = " & nb
With Sheets("Chablon")
Do Until counter = nb
counter = counter + 1
.Range(.Cells(11 + (i * 26), 2), .Cells(11 + (i * 26) + 21, 11)).Copy
.Cells(11 + (x * 26), 14).PasteSpecial Paste:=xlPasteValues, _
      Operation:=xlNone, SkipBlanks:=False, _
      Transpose:=False
      Range("H26").Select
x = x + 1
i = i + 1
If i = 48 Then i = 0
If x = nb Then x = 0
Loop

MsgBox "Opération terminée"
End With
'Sheets("Chablon").Protect
End Sub

Private Sub UserForm_initialize()
Dim i As Integer

    For i = 1 To 48
        ComboBox1.AddItem "chablon - semaine N° " & i
    Next i

     ComboBox2.AddItem "Nombre de semaines est 52"
     ComboBox2.AddItem "Nombre de semaines est 53"

End Sub

2-La méthode de genre : Value =value :

Que les valeurs sont transfére mais elle est la plus rapide.

Option Explicit
Private Sub CommandButton1_Click()

Dim i As Integer, nb As Integer, counter As Integer, Strt As Integer
Dim x As Integer
If ComboBox1.ListIndex = -1 Or ComboBox2.ListIndex = -1 Then
MsgBox "Veuillez compléter les choix "
Exit Sub
End If
'Sheets("Chablon").Unprotect

counter = 0
i = ComboBox1.ListIndex
x = ComboBox1.ListIndex

nb = ComboBox2.ListIndex + 52
'MsgBox "i = " & i & " x = " & x & " nb = " & nb
With Sheets("Chablon")
Do Until counter = nb
counter = counter + 1
.Range(.Cells(11 + (x * 26), 14), .Cells(11 + (x * 26) + 21, 23)).Value = _
.Range(.Cells(11 + (i * 26), 2), .Cells(11 + (i * 26) + 21, 11)).Value

x = x + 1
i = i + 1
If i = 48 Then i = 0
If x = nb Then x = 0
Loop
MsgBox "Opération terminée"
End With
'Sheets("Chablon").Protect
End Sub

Private Sub UserForm_initialize()
Dim i As Integer

    For i = 1 To 48
        ComboBox1.AddItem "chablon - semaine N° " & i
    Next i

     ComboBox2.AddItem "Nombre de semaines est 52"
     ComboBox2.AddItem "Nombre de semaines est 53"

End Sub

fichiers joint avec les macros a tester

https://www.cjoint.com/c/FGrc2AFFqgz

Rechercher des sujets similaires à "copier coller choix source destination"