IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA Suppression cellules inactives. Utilisation d'une fonction [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Par défaut VBA Suppression cellules inactives. Utilisation d'une fonction
    Bonjour,

    En cherchant sur le net j'ai trouvé une fonction permettant de "nettoyer" un fichier excel de toutes ces cellules vides non utilisées. Voici le code (qui est bien connu ...)
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Sub Nettoie()
    Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String
    Dim Avant As Double, plage As Range
    Dim MemVisible
    On Error Resume Next
    Calc = Application.Calculation ' ---- mémorisation de l'état de recalcul
    '------------------------------------------------------------
    MsgBox "Pour le classeur actif : " _
    & Chr(10) & ActiveWorkbook.FullName _
    & Chr(10) & "dans chaque feuille de calcul" _
    & Chr(10) & "recherche la zone contenant des données," _
    & Chr(10) & "réinitialise la dernière cellule utilisée" _
    & Chr(10) & "et optimise la taille du fichier Excel", _
    vbInformation, _
    "d'après LL par GeeDee@m6net.fr"
    '-------------------------------------------------------------
    MsgBox "Taille initiale de ce classeur en octets" _
    & Chr(10) & FileLen(ActiveWorkbook.FullName), _
    vbInformation, ActiveWorkbook.FullName
    '------------------------------------------------------------
    With Application
    .Calculation = xlCalculationManual
    .StatusBar = "Nettoyage en cours..."
    .EnableCancelKey = xlErrorHandler
    .ScreenUpdating = True
    End With
    '-------------------- le traitement
    For Each Sht In Worksheets
    ' Si la feuille est masquée
    MemVisible = Sht.Visible
    If Sht.Visible <> xlSheetVisible Then Sht.Visible = xlSheetVisible
    '
    Avant = Sht.UsedRange.Cells.Count
    Application.StatusBar = Sht.Name & "-" & Sht.UsedRange.Address
    '-------------------Traitement de la zone trouvée
    If Sht.UsedRange.Address <> "$A$1" Or Not IsEmpty(Sht.[A1]) Then
    Set DCell = Sht.Cells.Find("*", , , , xlByRows, xlPrevious)(2)
    '----------------Suppression des lignes inutilisées
    If Not DCell Is Nothing Then
    Sht.Range(DCell, Sht.Cells([A:A].Count, 1)).EntireRow.Delete
    Set DCell = Nothing
    Set DCell = Sht.Cells.Find("*", , , , xlByColumns, xlPrevious)(, 2)
    '----------------Suppression des colonnes inutilisées
    If Not DCell Is Nothing Then Sht.Range(DCell, Sht.[IV1]).EntireColumn.Delete
    End If
    Rien = Sht.UsedRange.Address
    End If
    'ActiveWorkbook.Save
    '---------------------Message pour la feuille traitée
    MsgBox "Nom de la feuille de calcul :" _
    & Chr(10) & Sht.Name _
    & Chr(10) & Format(Sht.UsedRange.Cells.Count / Avant, "0.00%") _
    & " de la taille initiale", _
    vbInformation, ActiveWorkbook.FullName
    '
    Sht.Visible = MemVisible
    Next Sht
    '--------------------Message fin de traitement
    MsgBox "Taille optimisée de ce classeur en octets " & Chr(10) _
      & FileLen(ActiveWorkbook.FullName), vbInformation, _
      ActiveWorkbook.FullNameActive
    '--------------------
    Application.StatusBar = False
    Application.Calculation = Calc
    End Sub
    Tout ça marche très bien mais je souhaiterai pouvoir mettre ce code dans mon fichier et qu'il ne scrute pas tous les onglets mais juste l'onglet où je fais appel à cette fonction.
    J'ai tenté de modifié le fichier en enlevant la partie suivante mais cela ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each Sht In Worksheets
    ' Si la feuille est masquée
    MemVisible = Sht.Visible
    If Sht.Visible <> xlSheetVisible Then Sht.Visible = xlSheetVisible
    '
    Avant = Sht.UsedRange.Cells.Count
    Application.StatusBar = Sht.Name & "-" & Sht.UsedRange.Address

    Savez vous comment je pourrais adapter ce code ?

    En vous remerciant,


    Vincent

  2. #2
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Par défaut
    Bonjour,

    peux être que j'ai pas compris la question , mais si tu veux que l'exécution soit faite sur un seul onglet , tu supprimes le for each ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    '   A supprimer  For Each Sht In Worksheets
     
    if activesheet.name = "Feuil1" then 
     
    end if
    idem si tu veux le lancer à la demande pour le seul onglet actif : tu peux remplacer le Sht. par activesheet

    Application.StatusBar = activesheet.Name & "-" & activesheet.UsedRange.Address

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Utilisation d'une fonction VBA dans la formule d'une cellule
    Par robx2309 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/05/2011, 00h41
  2. [XL-2007] Utilisation d'une fonction VBA dans un tableau croisé dynamique?
    Par Keketo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/01/2011, 10h36
  3. Réponses: 8
    Dernier message: 29/06/2006, 15h37
  4. Utilisation d'une fonction Transact-SQL ds une requête SQL
    Par Fl0ppeur dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/02/2006, 13h42
  5. Utilisation d'une fonction dans une procedure
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/08/2005, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo