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

  • Votes
  • Date
  • Date décroissante
  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
    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
      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
    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
      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 ?
      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...
    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
      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.
      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
      3. C'est parfait! je te remercie Eric!
      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
      5. Contributeur
        Re,

        en clair tu veux que j'ajoute 6 en F s'il y a 2012001 en E etc ?
        eric
    4. Contributeur
      1. Super!!! merci beaucoup Eric!! Dsl du temps que ca a pu mettre.
      2. Contributeur
        Pas de pb... :-)
        Je met en résolu pour toi.
        eric
      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
      4. En fait c'est toutes les colonnes après F qui sont supprimés, sinon colonne A B et C n'ont rien
      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