Copier/Coller Loop

Résolu/Fermé
Viapif - 2 juil. 2012 à 18:46
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014 - 4 juil. 2012 à 18:07
Bonjour,

Je me permets de poster ce message sur le forum car je n'en peux plus! je ne trouve pas de solution à mon problème, et je suis extrèmement novice en VBA.

Voila mon pb:
J'ai un tableau croisé dynamique sur une feuille. A coté de ce tableau, une séquence en D5:D65 que j'aimerai copier et mettre sur une autre feuille en A5 et la copier 12 fois à la suite. Le hic, c'est que le tableau CD sera modifié régulièrement dans le futur (Ajout/suppression de lignes).
J'aimerai également que la copie se fasse jusqu'à la derniere ligne importante, c'est à dire que "Total Général" je ne le veux pas (si on peut dire par exemple copier jusqu'à "total général"<> ca serait parfait).

Je sais pas si j'ai été assez clair.
Je vous remercie d'avance pour votre aide.

Viapif

A voir également:

5 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 2/07/2012 à 23:39
Bonsoir,

tu peux déposer un fichier exemple sur cjoint.com et coller ici le lien fourni.

copier et mettre sur une autre feuille

laquelle ?
Le hic, c'est que le tableau CD sera modifié régulièrement
C'est quoi le tableau CD ? Le TCD ?

eric
0
Bonjour Eric,

Voici le lien d'un fichier exemple que j'a fait http://cjoint.com/?0GdkUnJvXhD
Je t'ai laissé deux trois mots pour t'expliquer en gros ce que je voulais faire.

Si tu n'es pas sur n'hesites pas à me poster un message.

(le tableau CD = tableau Croisé Dynamique)

Je te remercie par avance

Viapif
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
3 juil. 2012 à 12:02
Re,

tu ne veux pas parler en terme de références ?
une clé sur le coté gauche
???
D5:A65 évoqué dans le post 1 je suppose ?
Seulement je lis GQNIYC d'un coté, et 2012001 sur l'autre feuille..(???).

et la copier 12 fois à la suite
copier GQNIYC, MKEPKF,... et le répéter 12 fois ou copier GQNIYC 12 fois, puis MKEPKF 12 fois etc

copier et mettre sur une autre feuille
laquelle ?

Je complète donc ma question : à partir de quelle cellule ?
Donne le maximum de précisions, c'est pénible de devoir les arracher au forceps...

Si je n'ai pas toutes les précisions au prochain post je laisse tomber.

eric
0
ok Je te comprends

La clé qu'il y a sur en feuille 1 D5:D65 (sans le "total général" qui est en D66 car ca serait le signe de retour au début de séquance (D5)) j'aimerais la copier en feuille 2 D4:D64 le long des 2012001 qui sont en E4:E64.

Cette copie "Feuille1 D5:D65" (GQNIYC, MKEPKF,... ) doit etre copiée 12 fois de suite. Cest a dire qu'en feuille2 cellule D4 la séquence commence et se termine en D64 pour 2012001 mais elle recommence en feuille 2 D65 avec 2012002, et pareil pour 2012003 jusqu'à 2012012. Pour chaque 20120XX il y a cette séquence qui se répète.

Tu dois savoir que la séquence feuille 1 D5:D65 qui est à copier (GQNIYC, MKEPKF,...) est en relation avec le Tableau croisé dynamique que tu vois en feuille 1 F4:U66. C'est à dire que le tableau pourra etre modifié avec ajout/suppression de lignes, ce qui modifiera la séquence qu'il y a en feuille1 D5:D65. Donc la macro devra prendre en compte cette variable de manière à ce qu'il n'y ait pas de décalages en feuille 2.

J'aimerai également en feuille 2 F4, une séquence de chiffre 6 qui suive l'éventuelle transformation de la colonne E (c'est à dire que si 2 lignes du tableau croisé sont supprimés, cela réduira le nombre de 20120XX de 2 lignes, ce qui devra engendrer la meme chose pour le nombre de "6" en colonne F).
Tu dois savoir que pour toutes cellules contenant 2012001 en E, alors les cellules en F seront un 6, pour 2012002 ca sera un 7 et 2012003 un 8, tout cela jusqu'à 2012012.

Je te mets un autre lien pour que tu vois a quoi j'aimerais que ca ressemble dans la feuille 2 du premier fichier que je t'ai envoyé.

http://cjoint.com/?0GdpKeUqZ0v

J'espere avoir été clair. Si tu decides de me laisser tomber, previens moi quand meme.

Merci Eric

PS: je t'avais mis des commentaires dans le fichier excel ca n'a pas marché ou est-ce qu'ils n'étaient pas utiles? o_O
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
3 juil. 2012 à 18:03
Re,

Tu dois savoir que pour toutes cellules contenant 2012001 en E, alors les cellules en F seront un 6, pour 2012002 ca sera un 7 et 2012003 un 8, tout cela jusqu'à 2012012.
Je ne vois que des 6 dans ton tableau...

Au début tu demandais : et la copier 12 fois à la suite
Je la copie 12 fois avec 20120001 puis 2012002 etc sans me soucier des 6 et des 7 ?
0
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014
4 juil. 2012 à 10:54
Pourtant en descendant plus bas, en F65 les 7 commencent et pareil en F126 les 8 commencent... C'est dans le fichier classeur 2. Tu vois les 201200X et la séquence copiée plusieurs fois sur le coté?

en effet, sans te soucier des 6 et des 7 en effet, une premiere copie de la séquence D5:D65 en 2012001 et une deuxieme en 2012002 etc...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
3 juil. 2012 à 18:27
Re,

regarde si c'est conforme.
Pour simplifier le code il faut ajouter Séquence en Feuil2!D3 :
Sub copierSéquence()
    Const débutSeq As Long = 2012 ' mettre à jour selon le besoin
    Const nbCol As Long = 10 ' nombre de colonnes à nettoyer sur shDest
    '
    Dim shSource As Worksheet, shDest As Worksheet, plage As Range, celDest As Range
    Dim i As Long
    Set shSource = Worksheets("Feuil1")
    Set shDest = Worksheets("Feuil2")
    ' nettoyer
    shDest.[D4].Resize(shDest.[D65536].End(xlUp).Row - 3, nbCol).ClearContents
    'remplir
    Set plage = Range(shSource.[D5], shSource.[D:D].Find("Total général", LookIn:=xlValues, LookAt:=xlWhole).Offset(-1, 0))
    Set celDest = shDest.[D:D].Find("Séquence", LookIn:=xlValues, LookAt:=xlWhole).Offset(1, 0)
    If Not plage Is Nothing Then
        For i = 1 To 12
            celDest.Resize(plage.Rows.Count, 1) = plage.Value
            celDest.Resize(plage.Rows.Count, 1).Offset(0, 1) = débutSeq * 1000 + i
            Set celDest = celDest.End(xlDown).Offset(1, 0)
        Next i
    End If
End Sub

https://www.cjoint.com/?BGdszMlyiBj
eric
0
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014
4 juil. 2012 à 10:57
Tout d'abord merci Eric pour ton temps.

Je viens d'essayer la macro mais une erreur Débogage est apparu pour cette ligne:
shDest.[D4].Resize(shDest.[D65536].End(xlUp).Row - 3, nbCol).ClearContents

Je t'avoue que je ne sais pas comment la résoudre sinon je ne t'aurais pas demandé ton aide au départ ;)

Que je dois faire?

V.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
4 juil. 2012 à 11:51
Bonjour,

Effectivement un cas oublié...
Remplace par :
    ' nettoyer
    If shDest.[D65536].End(xlUp).Row - 3 Then
        shDest.[D4].Resize(shDest.[D65536].End(xlUp).Row - 3, nbCol).ClearContents
    End If

eric
0
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014
4 juil. 2012 à 12:16
C'est parfait! je te remercie Eric!
0
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014
4 juil. 2012 à 12:21
Pour les 6 en colonne F dont je te parlais cetait sur le deuxieme envois que je t'ai fait:

https://www.cjoint.com/?0GdpKeUqZ0v

le nom c'est classeur 2

tu as la colonne E contenant 201200X, en colonne F le chiffre 6 pour 2012001, 7 pour 2012002...
2012003 8
2012004 9
2012005 10
2012006 11
2012007 12
2012008 13
2012009 14
2012010 15
2012011 16
2012012 17

J'aimerai que les chiffre en F correpondent à ceux de la colonne E pour chaque cellules
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 4/07/2012 à 12:38
Re,

en clair tu veux que j'ajoute 6 en F s'il y a 2012001 en E etc ?
eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
4 juil. 2012 à 15:15
0
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014
4 juil. 2012 à 15:24
Super!!! merci beaucoup Eric!! Dsl du temps que ca a pu mettre.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
4 juil. 2012 à 16:48
Pas de pb... :-)
Je met en résolu pour toi.
eric
0
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014
4 juil. 2012 à 16:57
Me revoici, j'ai une dernière question...

Quand je lance ma macro dans la feuille soucre tout se déroule très bien, j'ai ma séquence, mes 201200X et mes 6-7-8-9... en revanche toutes mes données de la feuille sont supprimés par la suite sauf biensur les données de macro... est-ce qu'il y a quelque chose a faire en particulier?

Merci Eric
0
viapif Messages postés 11 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 9 juillet 2014
4 juil. 2012 à 17:06
En fait c'est toutes les colonnes après F qui sont supprimés, sinon colonne A B et C n'ont rien
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 4/07/2012 à 17:13
Tu n'es pas très curieux sur le code....

Je t'ai mis 2 constantes en début de code.
Const débutSeq As Long = 2012 ' mettre à jour selon le besoin
Const nbCol As Long = 10 ' nombre de colonnes à nettoyer sur shDest

Une pour le 2012 de début (je me suis dit que si c'était l'année ça serait amené à varier),
et une justement pour le nombre de colonnes à nettoyer (actuellement à 10)

Si tu la passes à 3, les lignes en surplus (par exemple tu passes dans ton TCD de 150 lignes à 100) ne seront pas nettoyées sur les autres colonnes.

eric
0