Ajouter – supprimer des lignes en VBA sans perturber les formule

Résolu
mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   -  
mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je cherche comment ajouter ou supprimer des lignes dans mon programme.
J’ai mis deux boutons, un pour l’ajout et l’autre pour la suppression.

Dans le cas de la suppression, je souhaite que ce ne soit possible que si la ligne est vide.
De plus lorsque j’ajoute des lignes les formules ne fonctionnent plus.

J’ai essayé avec des infos trouvées par ci par là sans arriver à la solution finale.

Es que je suis parti dans la bonne direction avec mon code ?

Ci-joint mon programme : https://www.cjoint.com/c/FCywz3JzAwt

Merci de votre aide

Cordialement

3 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Pour l'ajout de ligne je te suggère cette procédure plus simple :
    Sub Ajout_ligne()
    ActiveSheet.Unprotect
    Application.ScreenUpdating = False
        Range("ligne_ref").Insert Shift:=xlDown
        Cells(Range("ligne_ref").Row, 2).Offset(-2, 0).Resize(2, 1).FillDown
        Cells(Range("ligne_ref").Row, 10).Offset(-2, 0).Resize(2, 1).FillDown
     Application.ScreenUpdating = True
     ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
    End Sub
    

    Pour supprimer des lignes lorsqu'elles sont vides, cela ne va pas être possible puisque tu as des formules et donc la ligne n'est pas vide.
    Si tu supprimes en colonne C, par exemple ta formule en colonne B des lignes suivantes passe en erreur fatalement ;-)
    0
    1. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11
       
      Bonjour et merci pour le code

      Il me manque la fusion des lignes D à H qui n’est pas pris en comte dans la copie.
      Y a-t-il une solution simple ?

      Avec ton code les formules marchent bien lors de la copie, si je conserve ma ligne cachée.

      Je vais chercher maintenant à résoudre le code pour la suppression des lignes. Il doit bien y avoir une solution !

      Voici mon programme modifié avec ton code : https://www.cjoint.com/c/FCzkR1vcNIt

      Cordialement
      0
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour,

      <ital><Il me manque la fusion des lignes D à H /ital>

      Au lieu de lignes, ce serait plutôt des colonnes ;-)

      Tu devrais t'apercevoir assez rapidement si tu veux éviter de t'arracher les cheveux que faire des fusions, surtout en utilisant les macros, n'est pas très judicieux.
      Il me semble que dans ton cas au lieu de fusionner 5 colonnes avec une seule colonne agrandie tu aurais le même résultat.
      0
    3. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11
       
      Re,

      Si j'utilise la fusion de ces colonnes c'est que dans mon programme finale, il y a toutes les cellules de ces colonne dans la partie haute du tableau, ici non visibles, qui sont utilisées pour d'autres choses.

      Merci pour ta réponse.

      je vais continuer à chercher la solution à mes problèmes, et je suis certain qu'il y a une solution pour qui le code est familier.

      cordialement
      0
    4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour,

      C'est toi bien sûr qui fait ton tableau comme tu veux, mais regardes sur les forums ce qu'en disent ceux "pour qui le code est familier" comme tu dis.
      Si tu tiens à fusionner tu rajoutes cette ligne dans le code ci-dessus entre 8 et 9 :
      Cells(Range("ligne_ref").Row, 3).Offset(-1, 0).Resize(1, 5).merge


      Pour supprimer les lignes ce n'est pas un souci, tu pars d'en bas en remontant (step -1) mais avec ton numéro de ligne par formule tu n'auras pas de ligne vide et si tu en supprimes une ta formule est brisée car ton B3 + 1 par exemple deviendra #REF! si tu supprimes la ligne 3.
      0
    5. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11 > gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention  
       
      re,

      Effectivement tu as entièrement raison pour la fusion des cellules, mais malheureusement c'est pas toujours possible pour moi de faire autrement.

      Merci pour ton code, je vais tester après le repas.

      Pour la partie supprimer, comme il y a la ligne cachée ou j'ai ajouté des données en B pour pouvoir la reconnaître, il me semble qu'il y aura une possibilité sans perturber les formules. Je vais chercher et peut-être poserais encore une petite question .

      ça avance c'est déjà très bien. merci

      cordialement
      0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Comme tu tiens vraiment à avoir tes suppressions, les voici :

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

    Tu remarqueras que je n'ai pas utilisé ta formule pour derlig car elle ne fonctionne pas. Malgré ton info en ligne cachée, le résultat est faux, tout bonnement parce que "end(xlup)" ne tient compte que des lignes visibles.
    Par contre avec ma méthode tu vas pouvoir supprimer uniquement les lignes vides entre C et J.
    0
    1. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11
       
      re,

      l'importance c'est le résultat, est il est préférable d'avoir une solution par une personne qui connaît le ode qu'un bricolage comme j'essaye de le faire.

      Je ferais les test demain matin.

      Merci pour ton aide.

      Cordialement
      0
    2. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11
       
      Re,

      Je n’ai pas résisté à faire des essais.
      Ça marche bien. Demain matin je l’incorpore avec mes autres code pour vérifier le fonctionnement de l’ensemble.

      J’ai une autre question ou je ne trouve pas la réponse,
      Le code ci-dessous copie la formule de la colonne K dans la nouvelle ligne.

      Cells(Range("ligne_ref").Row, 11).Offset(-2, 0).Resize(2, 1).FillDown


      Est-il possible de copier le commentaire qui est dans une cellule avec la copie.
      Par exemple si j’ajoute le code qui suit, que faut-il remplacer pour avoir le commentaire copié ?

      Cells(Range("ligne_ref").Row, 3).Offset(-2, 0).Resize(2, 1).FilllDown


      Merci de ton aide

      Cordialement
      0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Voilà le code complet avec copie des commentaires s'ils existent :
    ActiveSheet.Unprotect
    Application.ScreenUpdating = False
        Range("ligne_ref").Insert Shift:=xlDown
        Cells(Range("ligne_ref").Row, 2).Offset(-2, 0).Resize(2, 1).FillDown 'copie formule de la colonne B
        Cells(Range("ligne_ref").Row, 11).Offset(-2, 0).Resize(2, 1).FillDown ' copie formule de la colonne K
        Cells(Range("ligne_ref").Row, 4).Offset(-1, 0).Resize(1, 5).Merge ' fusion de colonne D à H
        Rows(Range("ligne_ref").Row).Offset(-2).Copy
        Rows(Range("ligne_ref").Row).Offset(-1).PasteSpecial Paste:=xlPasteComments ' copie commentaires
    Application.ScreenUpdating = True
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
    

    0
    1. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11
       
      Bonjour,

      Merci pour la réponse.

      j'ai ajouter le code dans mon application et cela ne semble pas marcher.
      j'ai fait l'essai avec et sans ma ligne cachée.

      y a t-il quelque chose que je n'est pas fait ou compris pour le bon fonctionnement ?

      voici le fichier modifié : https://www.cjoint.com/c/FCAh5jufspt

      cordialement
      0
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour,

      Est-il possible de copier le commentaire qui est dans une cellule avec la copie.
      Je t'ai rajouté la copie des commentaires mais tu n'as pas de commentaires !

      Qu'appelles-tu "commentaires" ?
      0
    3. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11
       
      Re,

      Dans la cellule C12, il y a un commentaire que j'avais ajouté par clic droit puis ajouter commentaire où il y a la consigne "il faut renseigner les lignes en rouge"

      cordialement
      0
    4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Re,

      Dans la cellule C12, dans une cellule cachée : je répète encore mais personne ne la vois !
      0
    5. mijean94 Messages postés 413 Date d'inscription   Statut Membre Dernière intervention   11 > gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention  
       
      re,


      oui elle est effectivement cachée, mais comme je l'explique dans mon post 13, cachée ou pas, il n'y a pas la copie du commentaire ?

      cordialement
      0