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

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 897
Membres
103 674
dernier inscrit
Marco74