Copier/Coller Loop

Résolu
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

5 réponses

  1. Contributeur
    0
    1. Super!!! merci beaucoup Eric!! Dsl du temps que ca a pu mettre.
      0
    2. Contributeur
      Pas de pb... :-)
      Je met en résolu pour toi.
      eric
      0
    3. 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
    4. En fait c'est toutes les colonnes après F qui sont supprimés, sinon colonne A B et C n'ont rien
      0
    5. Contributeur
      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
  2. Contributeur
    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
    1. 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
    2. Contributeur
      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
    3. C'est parfait! je te remercie Eric!
      0
    4. 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
    5. Contributeur
      Re,

      en clair tu veux que j'ajoute 6 en F s'il y a 2012001 en E etc ?
      eric
      0
  3. 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
    1. Contributeur
      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
    2. 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
  4. 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
    1. Contributeur
      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
  5. Contributeur
    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