Ajouter – supprimer des lignes en VBA sans perturber les formule [Résolu/Fermé]

Signaler
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
-
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
-
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 : http://www.cjoint.com/c/FCywz3JzAwt

Merci de votre aide

Cordialement

3 réponses

Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 799
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 ;-)
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 799
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.
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7 > gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018

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
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7 > mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019

Re

Pour l’ajout de ton code tu veux surement dire 6/7 plutôt que 8/9. Ok ça marche nickel.

J’avais trouvé une solution, mais elle était beaucoup plus compliquée que la tienne.
Ya pas à dire, lorsque le code et en toi, la solution tu verras.
Si non, tu galéreras. Et peut-être tu n’aboutiras pas.

Merci

Pour la fonction supprimer voici ma réflexion à la quelle je n’ai pas trouvé de solution actuellement.

A voir dans le code de la fonction supprimer : http://www.cjoint.com/c/FCzuJN6qEQt

Merci de ton aide

Cordialement
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
re,

Ajout interrogation :

Est il possible lors de la copie de la ligne, de copier aussi, le commentaire qui est dans une cellule de la ligne copiée ?

cordialement
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 799
Bonjour,

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

http://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.
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 799
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

gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 799
Re,

Dans la cellule C12, dans une cellule cachée : je répète encore mais personne ne la vois !
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7 > gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018

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
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
Re,

j'ai toujours des petites choses qui bloques et je n'arrive pas à trouver la solution.

Merci pour ton aide.

voici ce qui bloque :

a) la copie du commentaire de la cellule C17 n’est pas copier (cellule visible bien sur)
b) serait-il possible que la suppression des lignes ne remonte pas au dessus de la ligne 10

c)lorsque j'intègre le code dans mon programme il y a erreur sur la ligne ci dessous

message : Pour éviter la perte de donnes, Microsoft Office Excel ne peut pas déplacer de cellules non vides en dehors de la feuille.
Je recherche pourquoi, mai si tu as une orientation à me proposer c'est avec plaisir que je l'accueil.

Range("ligne_ref").Insert Shift:=xlDown


Mon fichier de test pour les fonctions + et - : http://www.cjoint.com/c/FCAr1xj1QNt

Cordialement
gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 799
Bonsoir,

a) devrait être copié même masqué : regardes c'est fait
b) suffit de bloquer la boucle à 11 : regardes c'est fait
c) regardes ta dernière ligne 65536 : elle a des informations

http://www.cjoint.com/c/FCAuwGtydQl
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7 > gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018

Bonsoir,

Un grand merci pour ton travail.
Ca marche nickel, même dans mon programme finale.
Tous les points sont résolus avec tes codes.

Cordialement