que signifie ActiveSheet.UsedRange.Columns.Count - 8 dans vba?
Comment vba connaît la gamme utilisée?
Voici la définition exacte de UsedRange
( Référence MSDN ):
Chaque objet de feuille de calcul a une propriété UsedRange qui renvoie un objet Range représentant la zone d'une feuille de calcul en cours d'utilisation. La propriété UsedRange représente la zone décrite par les cellules non vides les plus éloignées en haut à gauche et en bas à droite de la feuille de calcul et inclut toutes les cellules entre les deux.
Donc, fondamentalement, ce que cette ligne fait est:
.UsedRange
-> "Dessine" un cadre autour des cellules les plus à l'extérieur avec un contenu à l'intérieur..Columns
-> Sélectionne les colonnes entières de ces cellules.Count
-> Retourne un entier correspondant au nombre de colonnes (dans cette sélection)- 8
-> Soustrait 8 de l'entier précédent.Je suppose que VBA calcule le UsedRange en recherchant les cellules non vides avec les valeurs d'index le plus bas et le plus élevé.
Le plus souvent, vous obtenez une erreur car le nombre de lignes de votre plage est inférieur à 3 et que, par conséquent, le nombre renvoyé est négatif.
BernardSaucier vous a déjà donné une réponse. Mon article n’est pas une réponse, mais une explication de la raison pour laquelle vous ne devriez pas utiliser UsedRange
.
UsedRange
est très peu fiable, comme indiqué ICI
Pour trouver la dernière colonne contenant des données, utilisez .Find
, puis soustrayez-vous.
With Sheets("Sheet1")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastCol = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
Else
lastCol = 1
End If
End With
If lastCol > 8 Then
'Debug.Print ActiveSheet.UsedRange.Columns.Count - 8
'The above becomes
Debug.Print lastCol - 8
End If
On dirait que vous voulez vous déplacer. Essaye ça:
ActiveSheet.UsedRange.select
résulte en....
Si vous voulez déplacer cette sélection de 3 rangées vers le haut, essayez ceci
ActiveSheet.UsedRange.offset(-3).select
est ce que ca...
Je pense que si vous essayez:
Sub Macro3()
a = ActiveSheet.UsedRange.Columns.Count - 3
End Sub
avec une montre sur a
, vous verrez que cela fait une différence.
UsedRange représente non seulement les cellules non vides, mais également les cellules formatées sans aucune valeur. Et c'est pourquoi vous devriez être très vigilant.