Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

rajout et suppression de lignes par macros

  • Initiateur de la discussion Initiateur de la discussion boudu
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

boudu

XLDnaute Occasionnel
bonjour au forum
Mon fichier est protégé pour éviter des mauvaises manipulations des utilisateurs
Je souhaite pouvoir ajouter ou supprimer des lignes par le biais d'un bouton qui figurera sur la feuille
Le souci est donc d'une part d'incorporer à la macro la deprotection puis la reprotection de la feuille, et de pouvoir supprimer 'si possible d'un coup) toutes les lignes inutilisées apres la saisie + d'en rajouter ensuite en cas d'oubli
Il y a des formules sur les lignes qui doivent etre conservées lors de la création d'une nouvelle ligne
Je joins un petit fichier test, la feuille est protégée par mot de passe : toto
Merci d'avance
 

Pièces jointes

Re : rajout et suppression de lignes par macros

Boujou Boudu,
Je suppose que le critère de ligne vide est l'abscence de chiffre en colonne A, donc B.
L'astuce est de protéger la feuille, comme tu l'as fait, mais aussi les 2 macros de suppression et d'ajout de lignes. En revanche, je ne vois pas de trace d'autres formules dans ton exemple. Les sommes (10 ici) sont-elles mises "à la main" ? Si on insère une ligne, il faudra effacer la donnée ainsi recopiée, s'il s'agit d'une formule la conserver.
Dois-je poursuivre ma reflexion, car je dois m'absenter ce WE ?
A toi...
Gruick
 
Dernière édition:
Re : rajout et suppression de lignes par macros

Bonjour
Il est inutile de déprotéger et reprotéger : on peut protéger dans une macro avec le paramètre userinterfaceonly. Les macros peuvent alors agir sur la feuille mais pas l'utilisateur.
 
Re : rajout et suppression de lignes par macros

Bonjour boudu, Gruick, chris,

Comme le dit chris, pas besoin de déprotéger la feuille pour que les macros agissent dessus, l'argument UserInterfaceOnly de la méthode Protect est fait pour ça.

Ci-joint ton classeur modifié avec une façon de faire.

J'ai utilisé le code ci-dessous :

DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK
Code:
[SIZE=2]Option [COLOR=navy]Explicit[/COLOR]

[COLOR=navy]Private Sub[/COLOR] Workbook_[COLOR=navy]Open[/COLOR]()
      Sheets("Feuil1").Protect Password:="toto", UserInterfaceOnly:=[COLOR=navy]True
End[/COLOR] Sub[/SIZE]
DANS UN MODULE DE CODE STANDARD
Code:
[SIZE=2]Option [COLOR=navy]Explicit[/COLOR]

[COLOR=navy]Sub[/COLOR] SupprLignVide()
[COLOR=green]'myDearFriend! - Août 2006[/COLOR]
[COLOR=navy]Dim [/COLOR]Plage[COLOR=navy] As [/COLOR]Range, L[COLOR=navy] As [/COLOR]Range
      [COLOR=navy]With[/COLOR] Sheets("Feuil1")
            [COLOR=navy]For Each[/COLOR] L[COLOR=navy] In [/COLOR].UsedRange.Rows
                  [COLOR=navy]If [/COLOR]Application.CountBlank(L.Range("A1:H1")) = 8 [COLOR=navy]Then[/COLOR]
                        [COLOR=navy]If [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR]
                              [COLOR=navy]Set[/COLOR] Plage = L
                        [COLOR=navy]Else[/COLOR]
                              [COLOR=navy]Set[/COLOR] Plage = Union(Plage, L)
                        [COLOR=navy]End If[/COLOR]
                  [COLOR=navy]End If[/COLOR]
            [COLOR=navy]Next[/COLOR] L
            [COLOR=navy]If Not [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR] Plage.EntireRow.Delete
      [COLOR=navy]End With
End Sub[/COLOR]

[COLOR=navy]Sub[/COLOR] AjouteLigne()
[COLOR=green]'myDearFriend! - Août 2006[/COLOR]
[COLOR=navy]Dim [/COLOR]Plage[COLOR=navy] As [/COLOR]Range
[COLOR=navy]Dim [/COLOR]L[COLOR=navy] As Long[/COLOR]
      [COLOR=navy]With[/COLOR] Sheets("Feuil1")
            [COLOR=navy]Set[/COLOR] Plage = .Rows(.Range("A65536").[COLOR=navy]End[/COLOR](xlUp).Row)
            Plage.Copy
            .Rows(Plage.Row + 1).Insert shift:=xlDown
            Application.CutCopyMode = [COLOR=navy]False[/COLOR]
            [COLOR=navy]On Error Resume Next[/COLOR]
            .Rows(Plage.Row + 1).Cells.SpecialCells(xlCell[COLOR=navy]TypeConst[/COLOR]ants, 23).ClearContents
      [COLOR=navy]End With
End[/COLOR] Sub[/SIZE]
Cordialement,
 

Pièces jointes

Re : rajout et suppression de lignes par macros

Bonjour le forum,

Didier, ton code m'intéresse beaucoup car j'aimerais supprimer des lignes en fonction du chiffre affiché dans une colonne.
Par exemple pour la pièce jointe, j'aimerai supprimer les lignes pour lesquelles le nombre de la colonne H est inférieur à 10.000.
Je me suis donc dit que j'allais utiliser la base que tu donnes et la modifier pour qu'elle me soit utile. Mais je bloque notamment sur cette ligne :

Application.CountBlank(L.Range("A1:H1"))

En fait, je crois bloquer un peu partout.^^
Je comprends la logique de ton code, mais je ne sais pas par quoi le remplacer pour l'utiliser de la manière dont j'ai besoin.

Y aurait-il peut-être une formule plus simple qui me permettrai de supprimer ces lignes?

D'avance merci.
 

Pièces jointes

Re : rajout et suppression de lignes par macros

Merci à tous pour votre reflexion et particulierement à Mydearfriend dont le code repond tres exactement à ma question
Bonne continuation à tous et bon week end
 
Re : rajout et suppression de lignes par macros

Bonjour Pingouinal,

Ton problème est un peu différent et plus simple.

Ci-joint ton exemple modifié en conséquence.

Code:
[SIZE=2]Sub SupprLign()
[COLOR=green]'myDearFriend! - Août 2006[/COLOR]
[COLOR=navy]Dim [/COLOR]Plage[COLOR=navy] As [/COLOR]Range, C[COLOR=navy] As [/COLOR]Range
      [COLOR=navy]For Each[/COLOR] C[COLOR=navy] In [/COLOR]Sheets("Sheet1").UsedRange.Columns(8).Cells
               [COLOR=navy]If [/COLOR]C.Value < 10000 [COLOR=navy]Then[/COLOR]
                        [COLOR=navy]If [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR]
                                 [COLOR=navy]Set[/COLOR] Plage = C
                        [COLOR=navy]Else[/COLOR]
                                 [COLOR=navy]Set[/COLOR] Plage = Union(Plage, C)
                        [COLOR=navy]End If[/COLOR]
               [COLOR=navy]End If[/COLOR]
      [COLOR=navy]Next[/COLOR] C
      [COLOR=navy]If Not [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR] Plage.EntireRow.Delete
[COLOR=navy]End[/COLOR] Sub[/SIZE]
Cordialement,
 

Pièces jointes

Re : rajout et suppression de lignes par macros

Re,
Bon, pendant que je mangeais, les solutions sont arrivées, et m'ont appris la commande UserInterfaceOnly:=True.
Merci donc Didier, et bonne continuation à Boudu.
 
Re : rajout et suppression de lignes par macros

Merci Didier pour cette solution rapide.

Je l'ai testé sur un petit fichier et ça marche, pour le fichier original je ne peux pas le confirmer maintenant, c'est en cours (il fait plusieurs millers de lignes ^^ ).
 
Re : rajout et suppression de lignes par macros

Re pingouinal,
pingouinal à dit:
Merci Didier pour cette solution rapide.

Je l'ai testé sur un petit fichier et ça marche, pour le fichier original je ne peux pas le confirmer maintenant, c'est en cours (il fait plusieurs millers de lignes ^^ ).
Si ton fichier fait plusieurs milliers de lignes, alors je te conseille d'ajouter en début de procédure (juste après les déclarations de variables) :
Code:
[SIZE=2]With Application
      .ScreenUpdating = [COLOR=navy]False[/COLOR]
      .Calculation = xlCalculationManual
[COLOR=navy]End[/COLOR] With[/SIZE]
et à la fin (juste avant End Sub) :
Code:
[SIZE=2]With Application
      .ScreenUpdating = [COLOR=navy]True[/COLOR]
      .Calculation = xlCalculationAutomatic
      .Calculate
[COLOR=navy]End[/COLOR] With[/SIZE]
Cela devrait permettre d'accélérer un peu la procédure...

Bonne journée,
 
Re : rajout et suppression de lignes par macros

Merci pour le conseil Didier, je vais tester ça.

j'ai déjà gagné un peu de temps en ajoutant un tri dans l'ordre décroissant des montants. En tous cas, ton code marche parfaitement. Merci encore.
 
Re : rajout et suppression de lignes par macros

Re salut à tous
apres avoir tenté d'adapter le code de Mydearfriend il se trouve que ça ne fonctionne pas avec mon vrai fichier
J'avais simplifié au maximum mon fichier test mais le probleme est peut-etre lié à des cellules fusionnées ou d'autres formules sur le vrai fichier
Je le joins, si quelqu'un a une idée sur ce qui coince je le remercie à l'avance
Dans tous les cas bonne fin de journée à tous
 

Pièces jointes

Re : rajout et suppression de lignes par macros

Re boudu,

Personnellement, j'aurais apprécié que ton fichier exemple ressemble un peu plus au fichier réel... juste histoire de ne pas recommencer 2 fois le boulot 😡.

Pour info, la première chose à modifier était déjà : Sheets("1ère COM° FSLU ACCES") au lieu de Sheets("Feuil1") de l'exemple précédent...
Ensuite, je ne sais comment tu fais, mais dans ton dernier fichier, chaque cellule de ton tableau est affublée de bordures et ce, jusqu'à la fin de page en ligne 65536 ! Faut pas faire ça boudu, sinon tu vas vite te retrouver avec des fichiers au poids énorme inutilement !

Tu trouveras ci-joint ton dernier fichier avec la macro adaptée.

Bonne chance pour la suite.
Cordialement,
 

Pièces jointes

Re : rajout et suppression de lignes par macros

Salut MyDearFriend
Désolé, je ne pensais pas que les éléments en question avaient une incidence et j'ai essayé de rendre mon fichier test le plus leger possible
Donc je te remercie doublement (voir plus) pour le grand service que tu me rends
Bonne continuation
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…