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
    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
    1. 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
    2. 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
    3. 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
    4. 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