XL 2010 En VBA, sélectionnée la colonne B d'une sélection UsedRange

alol.ita

XLDnaute Nouveau
Bonjour,
Une question de débutant...je n'arrive pas à le faire!!!
J'ai une plage de cellule sélectionnée par l'UsedRange correspondant à la plage A1:G19 (qui varie chaque jour) avec
ActiveSheet.UsedRange.Select
Dans ce UsedRange.Select j'aimerais sélectionnée la colonne B pour effectuée ensuite une boucle sur cette sélection!

Merci pour votre aide
 

Dranreb

XLDnaute Barbatruc
Ça dépend de ce que vous voulez en faire derrière.
Je préfère autant que possible charger sa Value dans un tableau et travailler ensuite exclusivement avec celui ci. C'est toujours ce qu'il y a de plus rapide.
Si vous avez à travailler avec d'autres propriétés des cellules que leurs valeurs vous pouvez toutefois faire For Each Cel In Intersect(etc. Cel étant déclaré As Range.
 
Dernière édition:

alol.ita

XLDnaute Nouveau
J'essaie avec cette boucle:
For Each Cell In Rng
Var1 = Cell.Value
Next
Dans ma feuille Excel j'ai des cellules avec du texte, du nombre, du nombre et du texte, des cellules vides...et le tableau des chiffres n'est jamais au même range!
J'ai tjrs le problème pour sélectionner la cellule qui a pour valeur uniquement un chiffre entre 0 et 9...pour repérer la première Cellule contenant 1 Chiffre (origine de mon tableau contenant des chiffres sur plusieurs Range) Isnumeric , IsNumber ou IsDigit ne fonctionne pas!!!
J'essaie avec :
If Application.IsNumber(Cell) = True Then MsgBox ("OK")
If IsDigit(Cell) = True Then MsgBox ("OK")...renvoie aussi les nombres...
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Essayez comme ça :
VB:
Sub test()
Dim V, Cel As Range, Rng As Range
For Each Cel In Intersect(ActiveSheet.Columns("B"), ActiveSheet.UsedRange)
   V = Cel.Value
   If VarType(V) = vbDouble Then
      If V >= 0 And V <= 9 Then
         If Rng Is Nothing Then
            Set Rng = Cel
         Else: Set Rng = Union(Rng, Cel): End If: End If: End If: Next Cel
If Not Rng Is Nothing Then Application.Goto Rng
End Sub
 

Dranreb

XLDnaute Barbatruc
Ou si j'ai mal compris (vous disiez un chiffre, pas un nombre contenant 1 chiffre parmi ses caractères ou valant juste 1 chiffre, ce n'est pas la même chose. C'est peut être plutôt …Like "*#*" alors ?) :
VB:
Sub test()
Dim V, Cel As Range, Rng As Range
For Each Cel In Intersect(ActiveSheet.Columns("B"), ActiveSheet.UsedRange)
   V = Cel.Value
   If VarType(V) = vbString Then
      If V Like "#" Then
         If Rng Is Nothing Then
            Set Rng = Cel
         Else: Set Rng = Union(Rng, Cel): End If: End If: End If: Next Cel
If Not Rng Is Nothing Then Application.Goto Rng
End Sub
 
Dernière édition:

alol.ita

XLDnaute Nouveau
C'est bien valant 1 chiffre...Donc la 2ème solution proposée correspond à ma recherche.
En fait par macro vba excel je reprends les données d'une page web...En fait les cellules possédant un Chiffre correspond aux Range d'un tableau...Un fois trouvée la cellule chiffre, j'ai son Cel.Address...et par offset je délimite le tableau!
L'ambiguité est le chiffre 0 ...car VarType(V) et V Like "#" ne le reconnait pas comme chiffre!!!
Le dernier souci c'est que des cellules avec 1 chiffre peuvent ne pas correspondre à mon tableau...je dois vérifier par les valeurs des cellules offset et ainsi valider que c'est bien le tableau!

Encore merci bcp pour votre aide précieuse Dranreb
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Êetes vous sûr que seule la colonne B est concernée ? Parce qu'il y a des chiffres en B6:G7 dans votre exemple.
VB:
Sub Chiffre()
Dim V, Cel As Range, OK As Boolean, Rng As Range
For Each Cel In Intersect(ActiveSheet.Columns("B"), ActiveSheet.UsedRange)
   V = Cel.Value
   Select Case VarType(V)
      Case vbString: OK = V Like "#"
      Case vbDouble: OK = Int(V) = V And V >= 0 And V <= 9
      Case Else: OK = False: End Select
   If OK Then
      If Rng Is Nothing Then
         Set Rng = Cel
         Else: Set Rng = Union(Rng, Cel): End If: End If: Next Cel
If Rng Is Nothing Then Exit Sub
Application.Goto Rng
MsgBox Rng.Address, vbInformation
End Sub
 

alol.ita

XLDnaute Nouveau
Un fois que B6 est trouvé et déterminé...il est l'origine Range pour les autres cellules...D'où le tableau sur la plage B6:G7!!!
Mais il se pourrait que la cellule origine se trouve sur colonne A ou d'autres colonnes...en utilisant le UsedRange tout simplement pour élargir la zone de recherche!
Je vais tester tout ça...Merci
 

Dranreb

XLDnaute Barbatruc
Oui, par exemple comme ça :
VB:
Sub Chiffre()
Dim V, Cel As Range, OK As Boolean, Rng As Range
For Each Cel In ActiveSheet.UsedRange
   V = Cel.Value
   Select Case VarType(V)
      Case vbString: OK = V Like "#"
      Case vbDouble: OK = Int(V) = V And V >= 0 And V <= 9
      Case Else: OK = False: End Select
   If OK Then
      If Rng Is Nothing Then
         Set Rng = Cel
         Else: Set Rng = Union(Rng, Cel): End If: End If: Next Cel
If Rng Is Nothing Then Exit Sub
Application.Goto Rng
If Rng.Areas.Count > 1 Then MsgBox "Attention: plage disjointe:" _
   & vbLf & Rng.Address, vbExclamation _
   Else MsgBox Rng.Address, vbInformation
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 175
Membres
103 152
dernier inscrit
Karibu