Microsoft 365 VBA Excel : sélection d'une plage variable

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

MagaliCLC

XLDnaute Nouveau
Bonsoir,

Je recherche une formule pour me permettre de sélectionner une plage de cellule sur VBA.
Je voudrais sélectionner les cases en colonne B dès lors que les cases en colonne A contiennent une valeur.

Exemple :
Soit un tableau sur la plage A1 à B10.
Les cases A1, A2 et A3 contiennent une valeur.
Comment indiquer sur VBA qui faut sélectionner la plage B1:B3 ?

Merci bcp

Magali
 
Solution
Re,

Selon votre exemple ET seulement si les valeurs de la colonne A ne peuvent être que des nombres:
VB:
Sub selectionner()
Dim xrg As Range
   On Error Resume Next
   Set xrg = Range("a:a").SpecialCells(xlCellTypeFormulas, xlNumbers)
   If xrg Is Nothing Then Range("a1").Select Else xrg.Offset(, 1).Select
End Sub
Bonsoir @MagaliCLC , Claudy 🙂,

Testez la macro suivante:
VB:
Sub selectionner()
Dim xrg1 As Range, xrg2 As Range, xrg As Range
   On Error Resume Next
   Set xrg1 = Range("a:a").SpecialCells(xlCellTypeConstants)
   Set xrg2 = Range("a:a").SpecialCells(xlCellTypeFormulas)
   If xrg1 Is Nothing Then
      Set xrg = xrg2
   ElseIf xrg2 Is Nothing Then
      Set xrg = xrg1
   Else
      Set xrg = Union(xrg1, xrg2)
   End If
  If xrg Is Nothing Then Range("a1").Select Else xrg.Offset(, 1).Select
End Sub
 
Re,

Selon votre exemple ET seulement si les valeurs de la colonne A ne peuvent être que des nombres:
VB:
Sub selectionner()
Dim xrg As Range
   On Error Resume Next
   Set xrg = Range("a:a").SpecialCells(xlCellTypeFormulas, xlNumbers)
   If xrg Is Nothing Then Range("a1").Select Else xrg.Offset(, 1).Select
End Sub
 
Re @MagaliCLC,

Le cas le plus général: Les valeurs de la colonne A peuvent être du texte ou des nombres voire des valeurs d'erreurs.

Le code:
VB:
Sub selectionnerBIS()
Const InclureErreur = False   'False alors on inclut les cellules avec valeur d'erreur de la colonne A
                              'True alors on exclut les cellules avec valeur d'erreur de la colonne A
Dim t, i&, derlig&, PremColVide&
Dim xrg1 As Range, xrg2 As Range, xrg As Range
 
   On Error Resume Next
   Application.ScreenUpdating = False
   derlig = Cells(Rows.Count, "a").End(xlUp).Row
   PremColVide = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count
   t = Range("a2:a" & derlig)
   For i = 1 To UBound(t)
      If IsError(t(i, 1)) Then
         If Not InclureErreur Then t(i, 1) = Empty
      Else
         t(i, 1) = IIf(t(i, 1) <> "", CVErr(xlErrNA), "")
      End If
   Next i
   Cells(2, PremColVide).Resize(UBound(t)) = t
   Set xrg = Cells(2, PremColVide).Resize(UBound(t)).SpecialCells(xlCellTypeConstants, xlErrors)
   If Not xrg Is Nothing Then xrg.Offset(, -PremColVide + 2).Select Else xrg.Offset(, 1).Select
   Columns(PremColVide).Delete
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
204
Retour