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

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

MagaliCLC

XLDnaute Nouveau
Bonsoir Claudia,
Merci mais les cellules vides sont variables.
je recherche donc une formule qui puisse rechercher les cellules compléter en colonne A, afin de sélectionner les cases correspondantes en colonne B.

Merci !
 

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
 

MagaliCLC

XLDnaute Nouveau
Bonsoir @mapomme,

Merci beaucoup

Cela sélectionne l'ensemble des cases de la colonne B (sans doute parce que les cases vides de la colonne A contiennent tout de même des formules).
En PJ un classeur test.

Magali
 

Pièces jointes

  • Classeur 2.xlsm
    16.8 KB · Affichages: 4

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
142
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…