Microsoft 365 Macro modification que je ne sais pas faire

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:

TooFatBoy

XLDnaute Barbatruc
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é !
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
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
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
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 :)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
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 :)
 

TooFatBoy

XLDnaute Barbatruc
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. ;)
 

TooFatBoy

XLDnaute Barbatruc
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:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
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 :)
 

TooFatBoy

XLDnaute Barbatruc
"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é. ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 194
Membres
103 153
dernier inscrit
SamirN