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

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

mapomme

XLDnaute Barbatruc
Supporter XLD
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
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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

  • MagaliCLC- tableau en colonne- v2.xlsm
    18.6 KB · Affichages: 6

Discussions similaires

Réponses
6
Affichages
130

Statistiques des forums

Discussions
312 184
Messages
2 086 008
Membres
103 089
dernier inscrit
johnjohn1969