Posez votre question Signaler

Excel et VBA : opérations sur les Ranges

Florian - Dernière réponse le 25 mars 2010 à 19:32
Bonjour,
Je souhaite masquer mes tableaux sur Excel (en utilisant VBA) de la manière suivante :
- Si toutes les cellules d'une colonne du tableau sont nulles alors je masque tous le tableau,
- Sinon je masque uniquement la ligne de la cellule qui est nulle (ça j'y arrive).
En VBA ça donne ça :
...
Private Sub CommandButton1_Click()
Dim plage As Range, c As Range, i As Integer
Set plage = Union([E9:E86], [E90:E128], [E275:E404])
i = 0
For Each c In plage
If c.Value = "0" Then
c.EntireRow.Hidden = True
i = i + 1
If i >= ((86 - 9) + 1) Then
[E8:E8].EntireRow.Hidden = True
[E7:E7].EntireRow.Hidden = True
Else
[E8:E8].EntireRow.Hidden = False
[E7:E7].EntireRow.Hidden = False
End If
Else
c.EntireRow.Hidden = False
End If
Next c
End Sub
...
Chaque tableau se compose de X lignes, ici vous pouvez voir qu'il y en a 3 :
([E9:E86], [E90:E128], [E275:E404])
Ces tableaux commencent respectivement à la ligne 7 (9 - 2, 2 lignes pour les titres du tableau) jusqu'à la ligne 86.
______________________________________
ligne 7 : Titre
ligne 8 : Titre
ligne 9 : Donnée (nulle ou non)
...
...
...
ligne 86 : Donnée (dernière ligne du tableau)
______________________________________
Le deuxième tableau de la ligne 88 jusqu'à la ligne 128 et enfin le troisième de la ligne 273 jusqu'à la ligne 404.
i compte ici le nombre de cellules du tableau qui sont nulles.
Si toutes les lignes du tableau sont nulles, alors je masque les 2 dernières lignes qui correspondent aux titres :
[E8:E8].EntireRow.Hidden = True
[E7:E7].EntireRow.Hidden = True
Sinon je masque uniquement la ligne dont la cellule EX est nulle.
Pour l'instant, j'arrive à masquer entièrement que mon premier tableau, avec cette partie du code :
[...]
i = i + 1
If i >= ((86 - 9) + 1) Then
[E8:E8].EntireRow.Hidden = True
[E7:E7].EntireRow.Hidden = True
Else
[E8:E8].EntireRow.Hidden = False
[E7:E7].EntireRow.Hidden = False
End If

[...]
Mais pour les 2 autres tableaux (et + à venir) je n'y arrive pas !!
Comment écrire cette partie du code pour qu'il traite tous les tableaux qui se trouvent dans mon Range "plage" sachant qu'ils ont toujours la même forme, c'est à dire 2 lignes pour les titres ?
En espérant avoir écrit quelque chose de compréhensible !
Merci d'avance,
Florian
Lire la suite 

Excel et VBA : opérations sur les Ranges »

3 réponses
Réponse
+1
moins plus
Bonjour Florian,
il est, parait-il, jamais trop tard.

Dim MaPlage as Range

set MaPlage = Union([E9:E86], [E90:E128], [E275:E404])
'pour exploiter la nouvelle plage

debug.print MaPlage.Areas.Count ' =3
debug.print MaPlage.Areas(2).Row ' =90 num de la 1ère ligne
debug.print Maplage.Areas(2).Rows.Count ' = 39 donc dernière = 90 + 39 - 1
'idem pour les colonnes

j' espère que tu avais trouvé par ailleurs.

Laurent
Florian69 - 25 mars 2010 à 19:32
Bonjour Laurent,

Je te remercie d'avoir prit le temps de lire mon message.
En effet j'ai trouvé une "solution" en utilisant la fonction filtre d'Excel.
Grâce à cela, je peux maquer les lignes où les cellules sont nulles. Les 2 lignes de titre ne sont, par-contre, jamais supprimées via cette méthode, ce qui ne me gène pas au final.

Je garde ce code de coté, il pourrait m'être utile dans le futur.

Encore merci,

Florian
Ajouter un commentaire
Réponse
+0
moins plus
Re,

Je viens rajouter quelques précisions pour être plus explicite.

Il y a 3 choses que je n'arrive pas à faire en fait :

- Pouvoir sélectionner le n ième Range dans Union (par un compteur par exemple), Est-ce possible ?
Par exemple je veux sélectionner le 3ième range de cette ligne :
plage = Union([E9:E86], [E90:E128], [E275:E404])

Je pourrais l'utiliser directement avec un For Each c in Range(E275:E404)

- Comment sélectionner la ligne de la première et de la dernière cellule du Range sélectionné dans Union ?
Par exemple je souhaite sélectionner le numéro de la ligne de la première cellule du "deuxième Range" :
plage = Union([E9:E86], [E90:E128], [E275:E404])

Ici le résultat serait : numéro de ligne = 90.

- Est-ce bien cela pour connaître le nombre de ligne comprit dans un Range ?
c.Rows.Count

qui remplace ((86 - 9) + 1) dans mon code ci-dessus.

Merci !

Florian
Ajouter un commentaire
Ce document intitulé « Excel et VBA : opérations sur les Ranges » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?