Copier/Coller Loop

Résolu
Viapif -  
viapif Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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
Viapif
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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
Viapif
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention  
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention  
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention  
 
C'est parfait! je te remercie Eric!
0
viapif Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
0
viapif Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Super!!! merci beaucoup Eric!! Dsl du temps que ca a pu mettre.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Pas de pb... :-)
Je met en résolu pour toi.
eric
0
viapif Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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