Microsoft 365 Macro modification que je ne sais pas faire

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 !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite une beau dimanche 🙂

Voici ci-dessous un code que j'ai besoin de modifier mais je n'y arrive pas malgré mes tentatives et recherches.
Pourriez-vous m'aider ?

VB:
Sub Lgn_vides()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
ActiveSheet.Unprotect Password:=""
    Sheets("RdV_faits").Select
        ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Select
        'Rows("107:10015").Select '???
        Selection.Delete Shift:=xlUp
        'Columns("R:ZZ").Select '???' R à dernière col vide
        Selection.Delete Shift:=xlToLeft
    Range("A1").Select
ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
L'objectif est de supprimer les lignes et colonnes vides
Codes que je cherche à modifier :
Supprime toutes les lignes à partir de la 1ère cellule A (cellule active) vide
1er..... Code que je cherche à modifier : "'Rows("107:10015").Select '???" par de la 1ère ligne active à la dernière ligne vide,
Supprime toutes les colonnes à partir de la col "R" jusqu'à la dernière colonne vide

2eme Code que je cherche à modifier : "'Columns("R:ZZ").Select '???' R à dernière col vide

Si vous voulez bien juste modifier mes codes ci-dessus, ça, je pourrai le comprendre 🙂
Si besoin, je ferai un fichier test.
Un grand Merci ... je continue mes recherches,
Amicalement,
lionel 🙂
 
Dernière édition:
Ou peut-être garder l'excellente macro de #40, mais remplacer
For Ligne = DL To 2 Step -1
If Cells(Ligne, "B") = "" Then Cells(Ligne, "A") = 1
Next Ligne
par une formule avec NB.VAL

Au départ je voulais aussi utiliser un filtre, mais je m'étais dit que ça allait modifier l'ordre de toutes ses lignes.
En voyant la macro de #40, j'ai compris qu'en ça ne déplaçait que les lignes vides, sans modifier l'ordre des autres lignes.
Tu m'as permis d'avancer dans ma réflexion, donc : merci @sylvanu !


Paix et félicité !
 
Bonjour le fil, le forum

C'est la solution du #post 37 avec une petite modif qui serait le mieux 🙂


@Usine à gaz , modifié comme cela peut être ?

Cordialement, @+

VB:
Sub Lgn_vides()
Dim Tab_Range%(), DerniereLigne&
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'ActiveSheet.Unprotect Password:=""
    Sheets("RdV_faits").Select
        DerniereLigne = ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Row
        ReDim Tab_Range(1 To DerniereLigne, 1 To 2)
        For r = 2 To DerniereLigne
            Tab_Range(r, 1) = 1
            If Application.CountA(Rows(r)) = 0 Then Tab_Range(r, 2) = 1
        Next r
        Columns("A:B").Insert shift:=xlToRight
        Range("A1:B" & DerniereLigne).Value2 = Tab_Range
        Range("A1:B1").AutoFilter
        ActiveSheet.Range("$A$1:$B$" & DerniereLigne).AutoFilter Field:=2, Criteria1:="1"
        Range("B3:B" & DerniereLigne + 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete shift:=xlUp
        Columns("A:B").Delete shift:=xlToLeft
        Columns("F:zz").Delete shift:=xlToLeft
        Range("A1").Select
    Sheets("Appels").Select
        DerniereLigne = ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Row
        ReDim Tab_Range(1 To DerniereLigne, 1 To 2)
        For r = 2 To DerniereLigne
            Tab_Range(r, 1) = 1
            If Application.CountA(Rows(r)) = 0 Then Tab_Range(r, 2) = 1
        Next r
        Columns("A:B").Insert shift:=xlToRight
        Range("A1:B" & DerniereLigne).Value2 = Tab_Range
        Range("A1:B1").AutoFilter
        ActiveSheet.Range("$A$1:$B$" & DerniereLigne).AutoFilter Field:=2, Criteria1:="1"
        Range("B3:B" & DerniereLigne).SpecialCells(xlCellTypeVisible).EntireRow.Delete shift:=xlUp
        Columns("A:B").Delete shift:=xlToLeft
        Columns("F:zz").Delete shift:=xlToLeft
        Range("A1").Select
'ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
[a1].Select
End Sub
 
Ou peut-être garder l'excellente macro de #40, mais remplacer
For Ligne = DL To 2 Step -1
If Cells(Ligne, "B") = "" Then Cells(Ligne, "A") = 1
Next Ligne
par une formule avec NB.VAL

Au départ je voulais aussi utiliser un filtre, mais je m'étais dit que ça allait modifier l'ordre de toutes ses lignes.
En voyant la macro de #40, j'ai compris qu'en ça ne déplaçait que les lignes vides, sans modifier l'ordre des autres lignes.
Tu m'as permis d'avancer dans ma réflexion, donc : merci @sylvanu !


Paix et félicité !
Malheureusement, je ne peux pas prendre le risque d'ajouter une colonne dans mon fichier de travail, même si elle est supprimée après traitement. c'est bien la solution du #post 37 qui conviendrait le mieux si elle ne supprimait pas les 1ères lignes 🙂
 
Bonjour le fil, le forum




@Usine à gaz , modifié comme cela peut être ?

Cordialement, @+

VB:
Sub Lgn_vides()
Dim Tab_Range%(), DerniereLigne&
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'ActiveSheet.Unprotect Password:=""
    Sheets("RdV_faits").Select
        DerniereLigne = ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Row
        ReDim Tab_Range(1 To DerniereLigne, 1 To 2)
        For r = 2 To DerniereLigne
            Tab_Range(r, 1) = 1
            If Application.CountA(Rows(r)) = 0 Then Tab_Range(r, 2) = 1
        Next r
        Columns("A:B").Insert shift:=xlToRight
        Range("A1:B" & DerniereLigne).Value2 = Tab_Range
        Range("A1:B1").AutoFilter
        ActiveSheet.Range("$A$1:$B$" & DerniereLigne).AutoFilter Field:=2, Criteria1:="1"
        Range("B3:B" & DerniereLigne + 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete shift:=xlUp
        Columns("A:B").Delete shift:=xlToLeft
        Columns("F:zz").Delete shift:=xlToLeft
        Range("A1").Select
    Sheets("Appels").Select
        DerniereLigne = ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Row
        ReDim Tab_Range(1 To DerniereLigne, 1 To 2)
        For r = 2 To DerniereLigne
            Tab_Range(r, 1) = 1
            If Application.CountA(Rows(r)) = 0 Then Tab_Range(r, 2) = 1
        Next r
        Columns("A:B").Insert shift:=xlToRight
        Range("A1:B" & DerniereLigne).Value2 = Tab_Range
        Range("A1:B1").AutoFilter
        ActiveSheet.Range("$A$1:$B$" & DerniereLigne).AutoFilter Field:=2, Criteria1:="1"
        Range("B3:B" & DerniereLigne).SpecialCells(xlCellTypeVisible).EntireRow.Delete shift:=xlUp
        Columns("A:B").Delete shift:=xlToLeft
        Columns("F:zz").Delete shift:=xlToLeft
        Range("A1").Select
'ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
[a1].Select
End Sub
Bonjour Bernard merci pour cet autre code mais ça ne fonctionne pas 🙂
 
Lionel, vous rendez vous compte que vous trouvez non risqué ( ce qui est vrai ) de supprimer plein de lignes et plein de colonnes, mais extrêmement risqué d'insérer une colonne.
Définitivement, je ne vous comprendrais jamais. Désolé. 🙂
Mais au moins, vérifiez, ma macro marche.
 
Lionel, vous rendez vous compte que vous trouvez non risqué ( ce qui est vrai ) de supprimer plein de lignes et plein de colonnes, mais extrêmement risqué d'insérer une colonne.
La colonne en question devrait, à mon avis, être présente en permanence vu que ce n'est pas la première fois, me semble-t-il, qu'il est question de savoir si une ligne du tableau est vide ou non. 😉
 
Re-Marcel : je ne peux pas modifier tous les codes de mon fichier pour ajouter une colonne. 🙂
Pas de souci si c'est ton choix. 😉
Remarque : si tu mets la colonne en question après la dernière colonne du tableau, ça ne doit pas te faire changer grand chose dans le code.
Mais, c'est vous qui voyez. 😉


c'est bien la solution du #post 37 qui conviendrait le mieux si elle ne supprimait pas les 1ères lignes 🙂
T'es vraiment certain que #37 supprime les premières lignes ???
Pour moi ça supprime le premier groupe de "lignes vides". Mais je peux me tromper bien sûr.
 
Dernière édition:
Pas de souci si c'est ton choix. 😉
Remarque : si tu mets la colonne en question après la dernière colonne du tableau, ça ne doit pas te faire changer grand chose dans le code.
Mais, c'est vous qui voyez. 😉



T'es vraiment certain que #37 supprime les premières lignes ???
Pour moi ça supprime le premier groupe de "lignes vides". Mais je peux me tromper bien sûr.
"T'es vraiment certain que #37 supprime les premières lignes ???"
OUI, il est super ce code de Sylvanu, une petite modif (si possible) suffirait 🙂
 
"T'es vraiment certain que #37 supprime les premières lignes ???"
OUI, il est super ce code de Sylvanu, une petite modif (si possible) suffirait 🙂
Pourtant ce n'est pas ce qui est décrit dans les commentaires du code :
' On repère la première ligne vide
' On repère la dernière ligne vide
' On supprime
Donc, pour moi ça supprime le premier groupe de "lignes vides".

Si ce code te convient, il te suffit de boucler jusqu'à la fin du tableau, pour que chaque groupe de lignes vides sera supprimé. 😉
 
- 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

Réponses
2
Affichages
1 K
Réponses
8
Affichages
1 K
Réponses
2
Affichages
738
Réponses
13
Affichages
2 K
Réponses
11
Affichages
3 K
Retour