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:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Un code classique et assez rapide pour supprimer des lignes vides (pour office 365) de la feuille RdV_faits :
VB:
Sub Lgn_vides()
Const formul = "=IF(CONCAT(plage)="""",NA(), ROW())"
Dim derlig&, dercol&, plage
   Application.ScreenUpdating = False
   With Sheets("RdV_faits")
      .Select
      If .FilterMode Then .ShowAllData
      If .Range("a2") = "Auxil" Then .Columns(1).Delete
      .Columns(1).Insert: .Range("a2") = "Auxil"
      derlig = .UsedRange.Row + .UsedRange.Rows.Count - 1
      dercol = .Cells(2, 1).End(xlToRight).Column
      If derlig <= 2 Then .Columns(1).Delete: Exit Sub
      plage = "a3:a" & derlig
      .Range("a3") = Replace(formul, "plage", plage)
      .Range("a3").AutoFill Destination:=Range(plage)
      .Range(plage) = Range(plage).Value
      .Range(plage).Resize(, dercol + 1).Sort key1:=.Range("a3"), order1:=xlAscending, Header:=xlNo
      On Error Resume Next
      .Columns(1).SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Delete
      On Error GoTo 0
      If .Range("a2") = "Auxil" Then .Columns(1).Delete
   End With
End Sub
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Lionel, et celle là , sans rajouter de colonne :
VB:
Sub SupLig()
    Application.ScreenUpdating = False
    DL = Range("A65500").End(xlUp).Row
    [XFD1] = "Tri"
    ' Dans cette colonne on met 1 si la ligne est vide
    For Ligne = DL To 2 Step -1
        If Cells(Ligne, "A") = "" Then Cells(Ligne, "XFD") = 1
    Next Ligne
    ' On tri cette colonne en valeurs décroissantes, donc les lignes vides au début
    Columns("A:XFD").Select
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("XFD1:XFD" & DL) _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("A1:XFD" & DL)
        .Header = xlYes
        .Apply
    End With
    ' On repère le dernier 1 de la colonne A
    DL = Range("XFD65500").End(xlUp).Row
    ' On supprime les lignes
    Rows("2:" & DL).Delete Shift:=xlUp
    ' On efface la colonne de tri
    Columns("XFD:XFD").ClearContents
    ' On redimensionne le curseur horizontal
    ActiveSheet.UsedRange
    [A1].Select
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Lionel, et celle là , sans rajouter de colonne :
VB:
Sub SupLig()
    Application.ScreenUpdating = False
    DL = Range("A65500").End(xlUp).Row
    [XFD1] = "Tri"
    ' Dans cette colonne on met 1 si la ligne est vide
    For Ligne = DL To 2 Step -1
        If Cells(Ligne, "A") = "" Then Cells(Ligne, "XFD") = 1
    Next Ligne
    ' On tri cette colonne en valeurs décroissantes, donc les lignes vides au début
    Columns("A:XFD").Select
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("XFD1:XFD" & DL) _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("A1:XFD" & DL)
        .Header = xlYes
        .Apply
    End With
    ' On repère le dernier 1 de la colonne A
    DL = Range("XFD65500").End(xlUp).Row
    ' On supprime les lignes
    Rows("2:" & DL).Delete Shift:=xlUp
    ' On efface la colonne de tri
    Columns("XFD:XFD").ClearContents
    ' On redimensionne le curseur horizontal
    ActiveSheet.UsedRange
    [A1].Select
End Sub
Re-Sylvanu :)
Je suis très sensible à tout ce que tu fais pour moi .... mais ce code ne fonctionne pas.

Ce n'est pas possible de juste modifier la solution du #post 37 ? :
Juste il faudrait que la suppression commence après :
ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Select
C'est à dire après la dernière ligne NON VIDE de la feuille.
Ce serait tout bon !
:)
 

ChTi160

XLDnaute Barbatruc
Re
Non car je n'ai pas de fichier Lol
c'est juste un tri de la Plage de Données !
Il faudrait pour obtimiser , savoir ce que contiennent les Colonnes de la plage de Données !
(ma question du #14)
le Code , pourquoi faire simple .............
VB:
Sub triTableau()
With Sheets("RdV_faits")
    MsgBox .UsedRange.Rows.Count & " Lignes" 'pour afficher le Nombre de Ligne avant tri
 With .UsedRange
      .Sort key1:=.Cells(1, 1), Order1:=xlAscending 'il faudrait savoir quelles colonnes trier
'pour conserver la chronologie(Colonnes Dates,Heures etc)
 End With
    MsgBox .UsedRange.Rows.Count & " Lignes"  'pour afficher le Nombre de Ligne après tri
End With
End Sub
Jean marie
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Juste il faudrait que la suppression commence après :
C'est à dire après la dernière ligne NON VIDE de la feuille.
Mais si on commence après la dernière ligne non vide, ça veut dire que toutes les lignes après sont vides, par définition.
Donc ça revient à supprimer toutes les lignes vides après la dernière ligne occupée. Mais XL va les remettre en l'état.
 

ChTi160

XLDnaute Barbatruc
Re
sylvanu
je pense que Lionel parle du code de ton Post 37 (il veut dire en partant du bas vers le Haut) mais ta procédure #37 suppose , qu'il n'y ait qu'une plage vide , je crois !
je ne sais pas s'il a regardé #65
jean marie
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87