Private Sub CommandButton1_Click()
Dim tablo, nlig&, ncol%, j%, n&, i&, nmax&
tablo = Feuil1.[A3].Resize(21, 18) 'matrice, plus rapide, dimensions modifiables
nlig = UBound(tablo): ncol = UBound(tablo, 2)
ReDim resu(1 To nlig, 1 To ncol)
For j = 1 To ncol Step 3
n = 0
For i = 2 To nlig
If tablo(i, j + 1) <> "" Then
n = n + 1
resu(n, j) = tablo(i, j)
resu(n, j + 1) = tablo(i, j + 1)
resu(n, j + 2) = tablo(i, j + 2)
End If
Next
If n > nmax Then nmax = n
Next
'---restitution et masquage des lignes vides---
With [A3] 'modifiable
.Resize(nlig, ncol) = resu
If nmax Then .Resize(nmax).EntireRow.Hidden = False
If nlig > nmax Then .Offset(nmax).Resize(nlig - nmax).EntireRow.Hidden = True
End With
End Sub
Oui mais alors il faudra supprimer les lignes vides du tableau structuré, ce n'est pas plus simple.Pourquoi ne pas tout simplement utiliser un tableau structuré en activant/désactiavent selon besoin, l'affichage d ela ligne des totaux ?
Mais si puisqu'il dépend d'un tableau source dont on peut diminuer le nombre des données.Il n'y a pas de raison d'avoir de lignes vides dans un tableau structuré
Oui, ou supprimer les lignes vides comme je le disais.Il suffirait de supprimer l'ensemble des lignes du dataBodyRange puis d'y ajouter les données voulues.
Bonjour MonsieurBonjour yahya.be, le forum,
Dans ce genre de problème il est mieux d'utiliser des tableaux VBA, c'est plus rapide :
Bonne journée.VB:Private Sub CommandButton1_Click() Dim tablo, nlig&, ncol%, j%, n&, i&, nmax& tablo = Feuil1.[A3].Resize(21, 18) 'matrice, plus rapide, dimensions modifiables nlig = UBound(tablo): ncol = UBound(tablo, 2) ReDim resu(1 To nlig, 1 To ncol) For j = 1 To ncol Step 3 n = 0 For i = 2 To nlig If tablo(i, j + 1) <> "" Then n = n + 1 resu(n, j) = tablo(i, j) resu(n, j + 1) = tablo(i, j + 1) resu(n, j + 2) = tablo(i, j + 2) End If Next If n > nmax Then nmax = n Next '---restitution et masquage des lignes vides--- With [A3] 'modifiable .Resize(nlig, ncol) = resu If nmax Then .Resize(nmax).EntireRow.Hidden = False If nlig > nmax Then .Offset(nmax).Resize(nlig - nmax).EntireRow.Hidden = True End With End Sub
oui je sais ça, mais si par exemple j'ajoute des clients,je vais chaque fois faire cela,pourquoi pas alors faire un bouton de commande pour mise à jour,veuillez voir la suggestion de JOB75RE
Il n'y a pas de raison d'avoir de lignes vides dans un tableau structuré puisque la ligne de sous totaux se déplace au fur et à mesure...
Il suffirait de supprimer l'ensemble des lignes du dataBodyRange puis d'y ajouter les données voulues.
Il est cependant vrai qu'ici la structure est tout sauf normée...
Cells.EntireRow.Hidden = False
With Range("a2").CurrentRegion: n = .Row + .Rows.Count: End With
If n < 24 Then Range(n & ":" & 23).EntireRow.Hidden = True
oui ce sont des chambres et ce tableau filtré est la situation et la situation des personnes hébergées ayant le droit pour la restauration (petit-déjeuner) et bien JOB75 m'a donné une bonne solution.merci à vous,pour vos réponses et merci à JOB75 .Re
Tu n'utilises par de tableau structuré (d'ailleurs ta structure n'est pas possible en l'état en tableau structuré) donc oublie mes remarques.
c'est quoi ? des chambres ?