Dupliquer tableau sur autre feuille avec modifications

Résolu
Bonjour,

Je souhaiterais a partir d'un tableau complet, en creer un deuxieme sur une autre feuille, mais en version simplifié. Tout cela automatisé/ a partir d'une macro
Ci-dessous les 2 tableau



Merci d'avance pour votre aide, je suis plutot debutant dans ce domaine !

24 réponses

Résumé de la discussion

Il s'agit d'automatiser, par macro, la création d'un deuxième tableau simplifié sur une autre feuille à partir d'un tableau complet, afin d'obtenir une version allégée prête à l'usage. Les échanges ciblent la gestion des titres et des zones couleur, le choix entre zone texte et cellule, et des manipulations comme l'insertion de lignes ou la suppression de colonnes via des commandes Excel. D'autres éléments évoquent le décalage des colonnes qui définissent les couleurs et l'en-tête identique, ainsi que des soucis pratiques comme des ajouts involontaires lors de l'enregistrement d'une macro.

Bobot (l’IA à votre service)
  1. De rien

    Si c'est (définitivement) fini, merci de mettre le sujet à Résolu (en dessous du titre de ta première demande)

    Bonne fin de journée
    0
    1. Tu avais parlé des zones colorées !
      Je t'ai mis entre '---------------------- les parties de codes correspondantes
      http://www.cjoint.com/c/EFykaPg7Q1g

      Cdlmnt
      0
      1. C'est vraiment parfait ! Encore merci mille fois pour votre aide.
        Vous etes très efficace !!
        0
    2. Comme ça ?
      http://www.cjoint.com/c/EFyjTqyKRkg

      Cdlmnt
      0
      1. Oui exactement, mais que cela se prolonge sur les autre colones qui suivent chaques zones de couleurs.
        En faites, des cadres de largeur ''zone couleur'' qui se prolonge jusqu'a la derniere colone de donnée.

        Est-il possible que j'ajoute cette partie du code au mien ?

        merci
        0
    3. Dernier details minime je suppose, quand il y a changement de couleur, il manque des bordures.
      Les bordures autour de quelle zone ?
      Cas 1. Une seule cellule
      Public Sub BordureCellule()
      With Selection.Borders
      .LineStyle = xlContinuous
      .Weight = xlMedium
      End With
      End Sub

      Cas 2. Une plage (un peu plus compliqué)
      Sub BorduresPlage()
      With Selection.Borders(xlEdgeLeft)
      .LineStyle = xlContinuous
      .Weight = xlMedium
      End With
      With Selection.Borders(xlEdgeTop)
      .LineStyle = xlContinuous
      .Weight = xlMedium
      End With
      With Selection.Borders(xlEdgeBottom)
      .LineStyle = xlContinuous
      .Weight = xlMedium
      End With
      With Selection.Borders(xlEdgeRight)
      .LineStyle = xlContinuous
      .Weight = xlMedium
      End With
      End Sub

      RQ. A la place de Selection, tu mets la plage.cellule concernée

      Cdlmnt
      0
      1. Les 3 zones de couleurs vert bleu et orange. Peut on faire en sorte que les cadre se mette sur les zones de couleurs meme si elle bougent sensiblement ( comme les insertions de lignes qui se mettents entre les zone de couleurs dans le simplified.

        Merci en tout cas !
        0
    4. Merci , mais qu'importe le numero que je met la seconde ligne :
      While .Cells(li, 7).Interior.ColorIndex = coul
      Reste jaune ... avez vous une autre solution ?

      ?? il fallait mettre 3 comme numéro de colonne (post #43)

      J'ai ajouté la constante coProductnameFS = 3
      et changé le 3 en coproductnamefS dans le code, comme ça, si tu modifies la structure, il te suffira d'intervenir uniquement pour changer la valeur de la constante
      http://www.cjoint.com/c/EFxodK1IRdg
      qu'est ce qui ne va pas dans la feuille Simplified1 ?
      0
      1. Ah et bien merci beaucoup cela marche maintenant.
        Tout est parfait, j'avais des problemes avec la suppression de collones car c'etait decalé, mais j'ai reussi a me debrouiller seul avec la commande
        Columns("F:H").Delete Shift:=xlToLeft
        Columns("H:R").Delete Shift:=xlToLeft

        Maintenant tout fonctione c'est un veritable plaisir.
        Dernier details minime je suppose, quand il y a changement de couleur, il manque des bordures.
        Savez vous juste comment encadrer chaque zones de couleurs par une cadre epais ?

        voici le liens vers le code complet:

        https://www.cjoint.com/c/EFxoXwbElEv

        Merci beaucoup !!!!!!!!!!
        0
    5. Si j'ai compris, il suffit de décaler la colonne qui détermine la couleur

           li = li + 1
      coul = .Cells(li, 3).Interior.ColorIndex
      While .Cells(li, 3).Interior.ColorIndex = coul
      li = li + 1
      Wend

      Cdlmnt
      0
      1. Bonjour,

        Merci , mais qu'importe le numero que je met la seconde ligne :
        While .Cells(li, 7).Interior.ColorIndex = coul

        Reste jaune ... avez vous une autre solution ?

        La premiere ligne :
        coul = .Cells(li, 3).Interior.ColorIndex

        ne bug pas apparament, cela ne viendrais pas uniquement de la seconde ?

        Avez vous pu consulter le fichier ou le code bug ?

        Merci beaucoup pour votre aide precieuse.
        0
    6. Tu ajoutes au code les deux lignes soulignées

           ' insertion de deux lignes blanches de hauteur HLiKPI (400)
      .Rows(li).Insert
      .Rows(li).Borders.LineStyle = xlNone
      .Rows(li).RowHeight = HliKPI
      .Range(.Cells(li, 1), .Cells(li, co)).Interior.ColorIndex = Blanc
      li = li + 1
      .Rows(li).Insert
      .Rows(li).Borders.LineStyle = xlNone
      ' departement suivant
      li = li + 1
      Next liTitreFF


      Bonne fin de journée
      0
      1. Bonjour,

        C'est parfait, merci beaucoup.
        J'a une derniere question, je penses que cela ira tres vite.

        J'ai tres legerement modifié ce fichier ( un colone supplementaire en A ) et essaye d'appliquer le code a nouveau mais il ne fonctionne pas. Vous trouverez ce fichier sur le lien pas OK.
        Un erreur apparait dans le code et destructure l'onglet simplified ( vous pouvez le voir la ligne concerné dans le codeen dessous ''<------'' ainsi qu'un lien avec le code complet)

        Pouvez vous m'aider a faire marcher mon code sur le nouveau fichier (pas ok) ?

        .Cells(li, 1).Value = Sheets(FF).Cells(liTitreFF, 1) & " Department"
        .Cells(li, 1).Font.Size = 60
        .Cells(li, 1).Font.FontStyle = "Gras"
        .Cells(li, 1).HorizontalAlignment = xlGeneral
        .Cells(li, 1).VerticalAlignment = xlCenter
        ' recherche ligne changement de couleur
        li = li + 1
        coul = .Cells(li, 2).Interior.ColorIndex
        While .Cells(li, 2).Interior.ColorIndex = coul <-------
        li = li + 1
        Wend

        ok : https://www.cjoint.com/c/EFtpbblYh1v
        Pas ok : https://www.cjoint.com/c/EFtpbBroLZv

        Code complet : https://www.cjoint.com/c/EFtpcEfGbGv

        Merci beaucoup !!
        0
    7. Bon,

      Pour insérer, redimensionner, colorier, remplir avec du texte une ligne ou une colonne, tu as tout ce qu'il faut dans les deux procédures, ou bien dans les diverses propositions que je t'ai faites plus haut.
      Les as tu lues ?
      Pour ma part, je ne pense pas pouvoir faire quelque chose de plus pour toi.

      Bonne fin de journée
      0
      1. Oui bien sur que je les ai lues, je vous demaidais juste comment supprimer une colone avec un code de ce type
        li = 52
        .Rows(li).Insert

        car je ne m'y retrouve pas forcement.
        Mais je vais chercher.

        Merci bien !
        0
      2. @mikamadeusjai utilise Columns("E:G").Delete Shift:=xlToLeft

        Merci :)
        0
      3. Bonjour,

        J'ai une utime question a vous poser si vous le permettez ?
        Dans votre code vous avez inserer deux lignes blanches entres les differentes couleurs. Ce qui est parfait .

        Mais comment faire pour que ces lignes apparraissent avec un format totalement vierge ( et non pas avec les cadres du reste du format)

        Merci beaucoup,

        Bonnje journée
        0
    8. Je ne comprends pas, chez moi, ça fonctionne
      Essaies avec ceci, titres dans cellule au lieu de textbox
      https://www.cjoint.com/c/EFepIoeydz1

      RQ. Dans l'editeur vba/Options/references as tu une microsoft excel 10.0 ou autre Library cochée ?
      Si tu ne l'as pas, tu vas la chercher dans la liste et la cocher
      0
      1. Pardon
        Une microsoft Office (10.0 chez moi) Object Library
        0
      2. Bonjour !

        Cela fonctionne, en revanche, si la feuille n'existe pas ( erreur out of range ) et si on repète l'opération, la feuille ne se supprime pas pour etre remplacer par une nouvelle, cela accumule les insertions de lignes et colones.
        0
      3. Je suis en train d'utiliser votre premier code, il a l'air de mieux fonctionner,

        Public Sub MAJFSimplified()
        Dim li As Long
        With Sheets(FS)
        li = 51
        .Rows(li).Insert
        li = 52
        .Rows(li).Insert

        A la suite de cela, quelle est la formule que je peux rajouter pour supprimer des colones, lignes ? merci
        0
      4. Bonjour

        1. Je t'ai dit plus haut que
        1.1. La procedure MAJFSimplified
        Je l'ai séparé de la proccédure KopieFF pour faciliter sa mise au point. Donc, elle ne devait être exécutée (pour le moment) que sur une feuille Simplified1 existante.
        1.2. Lorsqu'elle sera au point, c'est la procédure KopieFF qui va se charger de la faire fonctionner, sur une nouvelle feuille Simplified1

        2. Le fichier intégrant l'appel de MAJFSimplified dans KopieFF
        https://www.cjoint.com/c/EFfjLi3DjN1

        Cdlmnt
        0
      5. Oui merci,

        J'ai bien compris tout ca.

        Comme je vous le disais a la suite de ceci ;

        Public Sub MAJFSimplified()
        Dim li As Long
        With Sheets(FS)
        li = 51
        .Rows(li).Insert
        li = 52
        .Rows(li).Insert

        je souhaites mettres d'autres formules concernant cette feuille, pour supprimer des lignes et des collones.
        Pouvez vous me dire quelles sont les phrases type

        li = 52
        .Rows(li).Insert

        a rentrer a la suite pour effectuer ces suppressions de lignes et coloones
        co = A
        .col(co).supp

        dans le style ?
        0
    9. Pour le moment, la MAJFSimplified est séparée de KopieFF
      https://www.cjoint.com/c/EFeovfWVTo1
      A tester
      0
      1. Merci bien,

        En revanche qund je fait ctrl+m un message d'erreur apparait:

        Unable to set the text property of the characters class, concernant la ligne - >

        Selection.Characters.Text = Sheets(FF).Cells(liTitreFF, 1) & " Department"
        0
    10. Pour les titres des zones de couleurs, feuille simplified, par exemple :
      RSI Department.
      Est il indispensable de les mettre dans une zone texte plutôt que dans une cellule, ça complique as mal le code
      0
      1. Pardon, oui l'en tete de la full restera la meme.
        Oui vous pouvez mettre dans une cellule ce n'est pas un soucis, et si c'est plus simple pour vous tant mieux :).

        Merci !
        0
    11. Je parle de la feuille full où il y a actuellement 3 "lignes" RSI, R&F, ASP
      ce qui donne 7 lignes d'en tête
      est ce que ce sera toujours 7 lignes
      0
      1. OK, on va y aller

        3. Est ce que l'en tête de la full reste la même (7 lignes exactement)
        0
        1. Comme vous pouvez le voir dans le doc que je vous ai envoyé, non car il faut inserer les titres des chaques zones de couleurs, donc nous passons a 8 :)
          0
      2. J'aimerais a l avenir, n'avoir qu'a modifier la full, et que la simplified suive
        1. Si les cellules de la simplidfied contiennent des formules se référant à la full, les modifications vont suivre
        Il faudrait en savoir un peu plus sur le scénario envisagé.
        2. Une autre question. Est ce que la structure de la feuille Simplified reste la même (nombre de lignes, de colonnes, etc ...)
        0
        1. 1 La simplified ne contiendra pas de formules se referant a la full

          2 La structure de la feuille simplified doit suivre le meme structure que la full
          ( sauf comme vous pouvez le voir ds le doc envoye precedemment , collones en moins, lignnes en plus pour faire de la place pour les graphiques ... )
          Comme vous pouvez le voir la simplified est la meme que la full avec des colones en moins et des espaces entre les differentes zones de couleurs .
          0
      3. 1. Oui, cela est possible :)
        Ce n'est pas une réponse. C'est oui ou c'est non
        Si c'est oui, le problème est nettement plus simple. On crée une feuille Simplified "modèle" vide. Il suffira alors, à la demande, de la copier et de la remplir avec les données de la feuille full.
        0
        1. Oui alors :)

          Oui mais justement le but etant de ne pas avoir a recopier les donnees de la full sur la simplified, est-ce possible ? J'aimerais a l avenir, n'avoir qu'a modifier la full, et que la simplified suive :)
          0
      4. Une question. Est ce que la structure de la feuille Full peut changer (nombre de lignes, nombre de colonnes, etc ...)
        0
        1. Oui, cela est possible :)
          0
        2. Mais le format restera le meme
          0
      5. 1. Désolé,
        > La déclaration de la procédure
        Public Sub MAJFSimplified()
        > L'appel, depuis KopieFF : il manquait un "F"
        Call MAJFSimplified
        2.
        Public Sub MAJFSimplified()
        Dim li As Long
        With Sheets(FS)
        li = 10
        .Rows(li).Insert
        li = 21
        .Rows(li).Insert

        ...
        Mais c'était un exemple, j'ai mis le n° de ligne dans une variable, histoire de simplifier la suite des instructions concernant cette ligne
        Peux tu préciser un peu plus ce que tu souhaites faire dans cette feuille Simplified

        Cdlmnt
        0
        1. En faites ce n'est pas complique a expliquer.
          https://www.cjoint.com/c/EFejVpKRlQv

          Voici le document complet.
          Comme vous l'avez bien fait precedemment, il faut generer l'onglet simplified a partir du full.
          La difficulte est que cette onglet generé doit respecter le format de l'onglet simplified que vous trouverez sur ce fichier. ( suppressions de collones, insertions de lignes pour creer des espaces pour les graphiques ... )

          Voyez vous ce que je veux dire ?

          Merci
          0
      6. Pour ajouter une ligne il te faut lancer séparément (pour le moment) la procédure
        Lorsque tout sera OK, un Call MAJSimplified en fin de procédure KopieFF avant End Sub, suffira alors à la lancer lors de la création de la feuille
        0
        1. La fin de procodure KopieFF donne ceci donc :

          Application.ScreenUpdating = True
          Call MAJSimplified
          End Sub

          Message d'erreur ; Sub or function not defined
          Avec --> Public Sub KopieFF() en surbrillance

          Les soucis que j'ai doivent vous paraitre simple, mais je debute excusez moi.
          De plus commet faire pour inserer plusieur lignes a la suite ? De cette facon ?

          Public Sub MAJFSimplified()
          Dim li As Long
          With Sheets(FS)
          li = 10
          li = 11
          li = ....
          Rows(li).Insert

          Merci,
          0
      7. Non, ça ne devrait insérer qu'une ligne
        Pour tester, ajoutes cette procédure à compléter pour programmer les modifications de la feuille Simplidied
        Lorsque tout sera OK, un Call MAJSimplified en fin de procédure KopieFF suffira alors à la lancer lors de la création de la feuille

        Public Sub MAJFSimplified()
        Dim li As Long
        With Sheets(FS)
        li = 10
        Rows(li).Insert
        End With
        End Sub

        Attention. Le fait d'avoir des cellules fusionnées va très certainement créer pas mal de problèmes. Les cellules fusionnées ne sont jamais une bonne solution lorsqu'on doit agir dessus, que ce soit depuis la feuille ou depuis vba

        Bon courage
        0
        1. J'ai essaye de tout defusionner mais apparament le probleme ne viens pas de la...
          Lorsceque je rentre la formule que vous m'avez donné plus haut de cette facon :

          cofinFS = Sheets(FS).Cells(lititFS, Columns.Count).End(xlToLeft).Column
          For co = cofinFS To cosupFS Step -1
          Sheets(FS).Columns(co).Delete
          Public Sub MAJFSimplified()
          Dim li As Long
          With Sheets(FS)
          li = 10
          Rows(li).Insert
          End With
          End Sub
          Next co
          Application.ScreenUpdating = True
          End Sub

          Un message d erreur apparait lorsque j'essaye de lancer la macro : Expected end Sub, savez vous pourquoi ?

          Merci beaucoup
          0
      • 1
      • 2