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:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Supprime toutes les lignes à partir de la 1ère cellule A vide
1er..... Code que je cherche à modifier : "'Rows("107:10015").Select '???" par de la 1ère ligne active à la dernière ligne vide,
Moi je supprime de la première ligne à la dernière ligne qui contient quelques chose en colonne A. Par définition toutes les autres lignes après sont vides.
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
Moi je supprime de la première colonne à la dernière colonne qui contient quelques chose en ligne 1. Par définition toutes les autres colonnes après sont vides.

Donc j'ai toujours pas compris.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re Jean-Marie :)
"Les vides c'est n'importe où dans la plage définie ou alors dans une colonne précise ?"
NON Jean-Marie les vides ne sont pas n'importe où.
Seules sont concernées les lignes et les colonnes entièrement vides :

Je tente d'expliquer à nouveau (pas sûr d'y arriver lol)
Pour les lignes :
J'ai le code "ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Select qui m'amène à la 1ère cellule col A vide.
Je voudrais supprimer toutes les lignes entièrement vides qui sont dessous,
Pour les colonnes :
Supprimer toutes les colonnes à partir de la col "R" jusqu'à la dernière colonne entièrement vide
Est-ce plus clair ?
lionel :)
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Lionel, Patrick, Chti, sylvanu, le forum

une proposition, d'après ce que j'ai compris. 🤔 🤪
(mais je ne suis pas sûr d'avoir bien compris, google ne fait pas la traduction à partir du Lionel, sinon fais un exemple avec quelques dizaines de lignes et de colonnes avec la base de départ et le résultat attendu)

Cordialement, @+

VB:
Sub Lgn_vides()
Dim i&, j&, k&
With Application
    .EnableEvents = False
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
With Sheets("RdV_faits")
    .Unprotect Password:=""
    j = .Range("A" & .Rows.Count).End(xlUp).Row
    k = .Range("XFD1").End(xlToLeft).Column
    For i = k To 18 Step -1
        If Application.CountA(.Cells(1, i).Range("A1:A" & j)) = 0 Then .Cells(1, i).Range("A1:A" & j).Delete Shift:=xlToLeft
    Next i
    For i = j To 1 Step -1
        If Application.CountA(.Range(.Cells(i, 1).Address & ":" & .Cells(i, k).Address)) = 0 Then .Range(.Cells(i, 1).Address & ":" & .Cells(i, k).Address).Delete Shift:=xlUp
    Next i
    .Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
With Application
    .EnableEvents = True
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Bernard_XLD, Bonjour à tous qui avez voulu m'aider, le Forum,
Belle journée à toutes et à tous :)
@ Bernard_XLD : encore merci pour ton code :)
Je n'ai pas réussi à le faire fonctionner, ni à le modifier, j'en suis désolé :oops:

En revanche, j'ai travaillé sur un autre code :
VB:
Sub Lgn_vides()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'ActiveSheet.Unprotect Password:=""
    Sheets("RdV_faits").Select
        derniereLigne = ActiveSheet.UsedRange.Rows.Count
        Application.ScreenUpdating = False
        For r = derniereLigne To 2 Step -1
        If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
        Next r
        Columns("F:zz").Delete Shift:=xlToLeft
        Range("A1").Select
    Sheets("Appels").Select
        derniereLigne = ActiveSheet.UsedRange.Rows.Count
        Application.ScreenUpdating = False
        For r = derniereLigne To 6 Step -1
        If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
        Next r
        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
Il fonctionne correctement mais la suppression des lignes est très longue.
Est-il possible de l'améliorer pour qu'il soit plus rapide ?
C'est cette partie :
Code:
derniereLigne = ActiveSheet.UsedRange.Rows.Count
    Application.ScreenUpdating = False
    For r = derniereLigne To 2 Step -1 ou     For r = derniereLigne To 6 Step -1
    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    Next r
Merci à tous :)
Je joins le fichier test (sans les lignes et colonne ajoutées, car sinon trop gros),
lionel :)
 

Pièces jointes

  • Sup_Lignes_Vides.xlsm
    25 KB · Affichages: 5

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Marcel :)
"Et si tu mets ça en premier, ça ne va pas un peu moins lentement ?"
J'ai tenté aussi ça et dans tous les sens lol
Pour les colonnes, c'est instantané. C'est bien ce code de suppression de lignes qui est long :
VB:
derniereLigne = ActiveSheet.UsedRange.Rows.Count
    Application.ScreenUpdating = False
    For r = derniereLigne To 2 Step -1 ou     For r = derniereLigne To 6 Step -1
    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    Next r
"As-tu essayé de réduire la plage de CountA ?"
NON mais je ne sais pas le faire Grrrr !!!
:)
 

Discussions similaires