Se connecter avec
S'enregistrer | Connectez-vous

fonction permettant de cacher des cellules vides sous excel

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Bonjour a tous, je rebondis sur ce vieux sujet car j'ai un problème similaire,

Sur une feuille que nous appellerons F1, j'ai fais des renvois de lignes de feuilles F2, F3 et F4.

Sur la feuille F1, j'ai fais un renvoi des lignes F2 via fonctions a hauteur de ligne numéro 1, un renvoi des lignes F3 a hauteur de ligne 2500 et un renvoie des lignes F4 a hauteur de la ligne 5000.

Ceci me permet de continuer a écrire des lignes dans la feuille F2, F3 et F4 qui sont automatiquement générée en F1.

Néanmoins j'ai des lignes vides entre les renvoies de F2, F3 et F4 sur F1. Je souhaiterais donc les cacher.

Pour cela j'ai utilise le code ci-dessus, qui au lieu de me cacher uniquement les lignes vides, me les cache toutes !

Quelqu'un pourrait il m'apporter une solution ?

Cordialement,

T3tSuO
Expert Programmation

Ce bout de code devrait faire l'affaire.
Il a l'intérêt d'être universel : Il cache toutes les lignes vides, après examen de toutes les lignes.
En revanche, Il n'est pas très rapide.
  1. Dim sheet As Worksheet
  2. Dim cell As Range
  3. Dim line As Range
  4. Dim i As Long
  5. Dim blank As Boolean
  6.  
  7. Set sheet = Worksheets("Feuil1")
  8.  
  9. For i = 1 To 65536
  10. Set line = sheet.Rows(i)
  11. blank = True
  12. For Each cell In line.Cells
  13. If cell.Formula <> "" Then
  14. blank = False
  15. Exit For
  16. End If
  17. Next
  18. Application.StatusBar = i \ 656 & "%"
  19.  
  20. line.Hidden = blank
  21. Next
  22. Application.StatusBar = False

Alors il serait judicieux de sélectionner un sous-ensemble de colonnes dans lesquelles il suffirait de regarder pour savoir si la ligne est vide ou pas.
  1. Dim sheet As Worksheet
  2. Dim cell As Range
  3. Dim chk_z As Range ' zone de vérification
  4. Dim i As Long
  5. Dim blank As Boolean
  6.  
  7. ' // A adapter à la situation
  8. Set sheet = Worksheets("Feuil1")
  9.  
  10. For i = 1 To 65536
  11. ' // A adapter à la situation -------------
  12. Set chk_z = Union(sheet.Cells(2, i), sheet.Cells(4, i))
  13. blank = True
  14. For Each cell In chk_z.Cells
  15. If cell.Formula <> "" Then
  16. blank = False
  17. Exit For
  18. End If
  19. Next
  20. Application.StatusBar = i \ 656 & "%"
  21.  
  22. chk_z.EntireRow.Hidden = blank
  23. Next
  24. Application.StatusBar = False

Voici la version mono-colonne
  1. Dim sheet As Worksheet
  2. Dim cell As Range
  3. Dim i As Long
  4.  
  5. Set sheet = Worksheets("Feuil1")
  6.  
  7. For Each cell In sheet.Range("B1:B65536")
  8. cell.EntireRow.Hidden = cell.Formula = ""
  9. Application.StatusBar = i \ 656 & "%"
  10. Next
  11. Application.StatusBar = False

Comment ça, c'est trop long ?
Oki, retirons donc la lise à jour automatique de l'affichage.
On perd malheureusement le compteur dans la barre d'état.
Comme sur les traitements très longs, j'aime à savoir où j'en suis, j'ajoute quand même les lignes 20 à 24.
  1. Dim sheet As Worksheet
  2. Dim cell As Range
  3. Dim line As Range
  4. Dim i As Long
  5. Dim blank As Boolean
  6.  
  7. Set sheet = Worksheets("Feuil1")
  8.  
  9. Application.ScreenUpdating = False
  10. For i = 1 To 65536
  11. Set line = sheet.Rows(i)
  12. blank = True
  13. For Each cell In line.Cells
  14. If cell.Formula <> "" Then
  15. blank = False
  16. Exit For
  17. End If
  18. Next
  19. line.Hidden = blank
  20. If i Mod 300 = 0 Then
  21. Application.ScreenUpdating = True
  22. Application.StatusBar = i \ 656 & "% [" & i & "]"
  23. Application.ScreenUpdating = False
  24. End If
  25. Next
  26. Application.ScreenUpdating = True


---------------------------------------------------------------

Maintenant, voyons de plus près les soucis de T3tSuO.
Il y a trois zones dans ta feuille, de la ligne 1 à la 2499, de la 2500 à la 4999 et de la 5000 à la 65536.
On va donc se mettre sur la dernière ligne de chaque zone et remonter, avec une technique très proche de celle proposée par kiki.
  1. Dim F1 As Worksheet
  2. Dim cell1 As Range
  3. Dim cell2 As Range
  4.  
  5. ' // A adapter --------------
  6. Set F1 = Worksheets("Feuil1")
  7.  
  8. Set cell2 = F1.Range("A2499")
  9. Set cell1 = c2.End(xlUp).Offset(1)
  10.  
  11. F1.Range(cell1, cell2).EntireRow.Hidden = True


A refaire pour les deux autres zones.

bonjour,
j'au un fichier excel avec deux feuilles une s'appelle grand et l'autre petit
les données de grand doivent aller s'inscrire dans celle de petit automatiquement
mais quand elle
voici ce comment je me prends pour le faire
je remplis mes données de grand
ensuite je vais sur petit
et dans la cellule A1 j'utilise le signe = et retourne dans grand et fais enter
et avec celle-la dans petit je copie avec le signe +
voici le problème
les cellules vide inscrive un 0 je dois les effacer pas normal je crois
j'ai essayé avec la formule NBVAL çà ne fonctionne pas
que faire
merci à l'avance de vôtre aide
sergio
Lassé par la pub ? Créez un compte