Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[RÉSOLU] VBA : executer une macro si feuille non vide

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dionys0s

XLDnaute Impliqué
Re-bonjour le forum


j'ai la macro suivante :
Code:
Sub Insertion()

For x = 2 To Sheets.Count
    With Sheets(x)           
        .Select
        .Columns("A:A").Insert Shift:=xlToRight
        .Range("A1").Select
        
    End With
Next x
Sheets(1).Select

End Sub

je voudrais qu'elle ne s'exécute que si les onglets ne sont pas vides. Ca sert à rien pour le moment mais je vais rajouter des tas d'actions en plus de l'insertion, notamment certaines qui feront planter la macro si la feuille est vide.

Merci d'avance pour votre aide
 
Dernière édition:
Re : VBA : executer une macro si feuille non vide

Bonjour,

peut être avec un test comme ceci, attention teste uniquement le contenu des cellules, pas la présence d'objets...
Code:
Sub test()
Dim x As Integer
For x = 2 To Sheets.Count
    With Sheets(x)
        If Application.CountA(.Cells) > 0 Then
            .Columns("A:A").Insert Shift:=xlToRight
        End If
    End With
Next x
End Sub

non après midi
@+
 
Re : VBA : executer une macro si feuille non vide

Je n'arrive pas à l'intégrer à ma macro.

Voici ma nouvelle macro (elle a évolué)
Code:
Sub Mise_en_forme()

For x = 2 To Sheets.Count 'boucle sur tous les onglets du classeur en partant du second
    With Sheets(x) 'prend en compte l'onglet de la boucle
               
        .Select 'sélectionne l'onglet
        .Columns("A:A").Insert Shift:=xlToRight 'insère une colonne
        .Range("A1").Select 'sélectionne la cellule A1
        
        Range("A4").Select
        ActiveCell.FormulaR1C1 = "=LEFT(R[-2]C[4],6)"
        Range("A4").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        Columns("G:H").Select
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("A4").Select
    
    Columns("I:J").Select
    Selection.Delete Shift:=xlToLeft
    Range("A4").Select
    
    Selection.Copy
    ActiveCell.Offset(0, 1).Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, -1).Range("A1").Select
    Range(Selection, Selection.End(xlUp)).Select
    ActiveSheet.Paste
    Range("A4").Select
    
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Rows("1:2").EntireRow.Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Range("A1").Select
    
    End With
    
Next x

Sheets(1).Select

End Sub

Serait-il possible de demander à ma macro de ne pas toucher aux onglets vides sans modifier le code existant (j'entends juste en rajoutant du code au début et à la fin, mais sans modifier le reste) ?
 
Re : VBA : executer une macro si feuille non vide

Salut dionys0s et le forum
Autres manières de savoir si la feuille est vide :
Code:
Sub test()
If [A1].SpecialCells(xlCellTypeLastCell).Address(0, 0) = "A1" And IsEmpty([A1]) Then
    MsgBox "feuille vide"
End If
If Range("A1").SpecialCells(xlCellTypeBlanks).Count = Range([A1], [A1].SpecialCells(xlCellTypeLastCell)).Count Then
    MsgBox "feuille vide"
End If
End Sub
La première ne fonctionnera que si la feuille n'a pas été utilisée depuis l'ouverture (pas encore trouvé comment réactualiser LastCell)
La seconde que si les cellules sont réellement vides (sans formule).
Avec aussi peu d'infos, difficile d'orienter le choix.
A+
 
Re : VBA : executer une macro si feuille non vide

Bonjour le fil 🙂,
Pour l'intégration du code de Pierrot (qui a l'air de s'être absenté 😉) :
Code:
Sub Mise_en_forme()

For x = 2 To Sheets.Count 'boucle sur tous les onglets du classeur en partant du second
    With Sheets(x) 'prend en compte l'onglet de la boucle
[COLOR=red][B]If Application.CountA(.Cells) > 0 Then[/B][/COLOR]               
        .Select 'sélectionne l'onglet
        .Columns("A:A").Insert Shift:=xlToRight 'insère une colonne
        .Range("A1").Select 'sélectionne la cellule A1
        
        Range("A4").Select
        ActiveCell.FormulaR1C1 = "=LEFT(R[-2]C[4],6)"
        Range("A4").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        Columns("G:H").Select
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("A4").Select
    
    Columns("I:J").Select
    Selection.Delete Shift:=xlToLeft
    Range("A4").Select
    
    Selection.Copy
    ActiveCell.Offset(0, 1).Range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, -1).Range("A1").Select
    Range(Selection, Selection.End(xlUp)).Select
    ActiveSheet.Paste
    Range("A4").Select
    
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Rows("1:2").EntireRow.Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Range("A1").Select
[COLOR=red][B]End If[/B][/COLOR]    
    End With
    
Next x

Sheets(1).Select

End Sub
Celles de Gorfael peuvent être intégrées au même endroit 😛.
Bon courage 😎
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
687
Réponses
0
Affichages
654
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…