Copier/Coller Loop

Résolu
Viapif -  
viapif Messages postés 13 Statut Membre -
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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. 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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  3. 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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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. viapif Messages postés 13 Statut Membre
       
      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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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. viapif Messages postés 13 Statut Membre
       
      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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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. viapif Messages postés 13 Statut Membre
       
      C'est parfait! je te remercie Eric!
      0
    4. viapif Messages postés 13 Statut Membre
       
      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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Re,

      en clair tu veux que j'ajoute 6 en F s'il y a 2012001 en E etc ?
      eric
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    0
    1. viapif Messages postés 13 Statut Membre
       
      Super!!! merci beaucoup Eric!! Dsl du temps que ca a pu mettre.
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Pas de pb... :-)
      Je met en résolu pour toi.
      eric
      0
    3. viapif Messages postés 13 Statut Membre
       
      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. viapif Messages postés 13 Statut Membre
       
      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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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