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

Microsoft 365 "Dépassement de capacité"

rafi93

XLDnaute Occasionnel
bonjour à tous

sur une feuille contenant un tableau, j'ai une macro VBA qui se contente d'afficher toutes les colonnes, au cas où certaines seraient masquées, qui fonctionne parfaitement,
Sub Col_Affiche_tout()
Cells.Select
Selection.EntireColumn.Hidden = False
Range("A1").Select
End Sub

sur les cellules d'une colonne du tableau, j'ai rajouté une combobox toute simple pour sélectionner des items dans une liste
depuis, quand je lance la macro Col_Affiche_tout() j'ai un message d'erreur "Dépassement de capacité"
pourquoi ?
y a t il une solution ?

merci !
 

rafi93

XLDnaute Occasionnel
Merci Pierrejean !
c'était bien ça
mais pour que je puisse aller pêcher tout seul : quelle est l'explication ?
car je m'y perds toujours dans les multiples façon d'écrire la même chose en VB
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Hello @pierrejean
A tout hasard, il n'y aurait pas un code genre :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
End Sub
Si c'est le cas, il faut remplacer Count par CountLarge (mais c'est rarement le cas de devoir sélectionner toutes les cellules...
Bonne fin d'apm
 

Katido

XLDnaute Occasionnel
Bonjour,

C'est effectivement le Target.Count qui sature quand on sélectionne toutes les cellules (il y en a 2 ^ 34)
car c'est plus que la limite du Long, et .Count ramène un Long.

C'est en fait très facile de sélectionner toutes les cellules, même si on ne le veut pas : il suffit de cliquer sur le petit carré en haut à gauche des en-têtes (au-dessus du 1 et à gauche du A)

Plusieurs solutions :
1) utiliser .CountLarge (mais probablement pas disponible avec les anciennes versions) :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
End Sub
2) décomposer les lignes et les colonnes
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.rows.Count > 1 Then Exit Sub
If Target.columns.Count > 1 Then Exit Sub
End Sub
3) multiplier les nombres de lignes et de colonnes après conversion en Double
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If CDbl(Target.rows.Count) * Target.columns.Count > 1 Then Exit Sub
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Une fonction CellsCount qui prend en compte les Range à plusieurs zones:
VB:
Function CellsCount(xrg As Range)
Dim xa, x As Currency
   For Each xa In xrg.Areas: x = x + xa.Rows.Count * xa.Columns.Count: Next
   CellsCount = x
End Function
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…