XL 2010 Commande qui retourne la position d'une cellule dans une plage de cellules

BenHarber

XLDnaute Occasionnel
Bonjour le forum,
Je recherche la commande qui me renvoie un nombre entier correspondant à la position de la cellule dans maPlage : cf. exemple ci-dessous.

Set maPlage = Sheets(1). Range("A7:AL" & Range("A65536").End(xlUp).Row).Select
For Each cellule In maPlage
Ici, j’aimerais mettre la commande qui me renvoie le nombre entier correspondant à la position de la cellule dans maPlage
Dans mon exemple :
A7 = 1ère cellule passée en revue donc 1
A8 = 2,
A9 = 3 …etc…

Next cellule

L’un d’entre vous aurait-il une idée ?

Merci d’avance pour vos suggestions toujours pertinentes,

BH
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Benharber, bonjour le forum,

Pas sûr d'avoir bien compris... Essaie ça :

VB:
Sub Macro1()
Dim maPlage As Range
Dim A As Long
Dim cellule As Range


Set maPlage = Sheets(1).Range("A7:AL" & Range("A65536").End(xlUp).Row)
A = 1
For Each cellule In maPlage
   Debug.Print cellule.Address & " : " & A
   A = A + 1
Next cellule
End Sub

Set maPlage....Select, ça le fera pas...
 

BenHarber

XLDnaute Occasionnel
Bonjour Robert,
Merci de ta réponse ; cependant, ce n'est pas vraiment ça que je recherche.

Je vais essayer de formuler différemment. Lorsque j'écris par exemple :
"maPlage.cellule(1)" : je fais référence à la 1ère cellule de maPlage
"maPlage.cellule(2)" : je fais référence à la 2ème cellule de maPlage
"maPlage.cells.count" : je fais référence à la dernière cellule de maPlage

Moi, je recherche la commande qui pourrait se traduire comme ça :
"Quand j'arrive à la 18ème cellule de maPlage alors lancer le traitement x"
(le chiffre 18 étant une variable)

Je ne sais pas si c'est plus clair ?
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@BenHarber
Est-ce que cette macro TEST rend les choses plus claires pour toi?
NB: A tester sur une feuille vierge

Code:
Sub TEST()
Dim plage As Range, m$, Z
Set plage = Range("A1:E5")
plage.Clear
plage = "=""Adresse: ""&CHAR(64+COLUMN())&ROW()"
Z = plage.Count
With plage.Item(18)
    m = "Nombre de cellules: " & Z & Chr(13)
    m = m & "Adresse de l'élément 18: " & .Address & Chr(13)
    m = m & "Valeur de la cellule: " & .Value
    .Font.Bold = True
    .Borders.LineStyle = 1
    .Interior.ColorIndex = 6
End With
MsgBox m, vbInformation
End Sub
 

BenHarber

XLDnaute Occasionnel
Bonjour Staple1600,
Merci beaucoup pour ta suggestion. Cependant, je ne souhaite pas connaître l'adresse des cellules dans le fichier (ça, je sais faire).
Je souhaitais savoir s'il y avait une commande qui me donne la position (ou le rang) de ma cellule passée en revue
Autrement dit, un truc du genre : if maPlage.cellule.position = 5 (ou 18, ou 32....) .

Bon, cela dit ce n'est pas grave : je vais me débrouiller autrement.

Encore merci à toi et à Robert !
 

chris

XLDnaute Barbatruc
Bonjour

Je ne trouve pas du tout cela clair...

Sur une plage de y lignes et x colonnes, tu sembles d'après le #1 privilégier la colonne A

La notion de 1ère cellule ou nième cellule ne veut rien dire : tout dépend si on considère la ligne ou la colonne, juste la lecture ou bien d'autre actions faites ou bien la position du contenu dans un classement...

"Quand j'arrive à la 18ème cellule de maPlage alors lancer le traitement x"
tu y arrives comment ? On ne sait pas...
 

Si...

XLDnaute Barbatruc
Bon_jour (salut particulier à Robert l'enfant prodigue de retour dans la famille)

Avec ce que j'ai compris o_O, adapter l'appel de la macro qui sert à appeler la macro voulue.
VB:
 Private Sub Worksheet_SelectionChange(ByVal R As Range)  'au clic dans la plage nommée Zone
  If Not Intersect(R, [Zone]) Is Nothing And R.Count = 1 Then
  Dim C As Range, L As Long
  For Each C In [Zone]
  L = L + 1: If C.Address = R.Address Then macro L: Exit For
  Next
  End If
End Sub

Sub macro(n As Long)
  MsgBox "je lance  la macro " & n & vbLf & " pour l'élément " & ActiveCell, 11, "Si... tu y tiens..."
End Sub
 

Pièces jointes

  • IndexCellulePlage.xlsm
    19.1 KB · Affichages: 19

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à BenHarber, @Robert, @Staple1600, @chris, @Si...,

Au cas où...

Une fonction personnalisée retournant un numéro pour une cellule d'une plage. On peut utiliser la fonction soit en formule Excel soit en fonction VBA.
VB:
Function NumeroCellule(xplage, xcell, Optional xParLigne) As Long
' si xParLigne est omis, on calcule le numéro de la cellule xcell en parcourant la plage par colonne
' d'abord colonne 1 de la plage, puis colonne 2 puis... etc. jusqu'à trouver la cellule xcell
' si xParLigne est présent, on calcule le numéro de la cellule xcell en parcourant la plage par ligne
' d'abord ligne 1 de la plage, puis ligne 2... etc. jusqu'à trouver la cellule xcell

   If Not Intersect(xplage, xcell) Is Nothing Then
      If IsMissing(xParLigne) Then
         NumeroCellule = (xcell.Column - xplage.Column) * xplage.Rows.Count + (xcell.Row - xplage.Row + 1)
      Else
         NumeroCellule = (xcell.Row - xplage.Row) * xplage.Columns.Count + (xcell.Column - xplage.Column + 1)
      End If
   End If
End Function
 

Pièces jointes

  • BenHarber- Numéro cellule dans plage- v1.xlsm
    17.3 KB · Affichages: 19

Staple1600

XLDnaute Barbatruc
Bonjour mapomme

[aparté censément humoristique]
Tu devrais renommer ta fonction NumCell
Car NumeroCellule peut avoir un côté traumatisant pour les membres d'XLD qui ont connu les geôles de France et de Navarre.
C'eut été pire, si tu l'avais nommé NuméroEcrou.
Personnellement j'ai n'ai fait que passer par la case Prison (en touchant 40 000 quand je tombais pile poil dessus)
Mais c'était au XXième siècle, dans ma chambre, avec cousins et cousines, durant nos parties endiablées de Monopoly ;)
[/aparté censément humoristique]

Sinon merci pour le fil, et pour l'aiguille
Comprenne qui pourra ;)
 

Dranreb

XLDnaute Barbatruc
Bonsoir à tous.
Je souhaitais savoir s'il y avait une commande qui me donne la position (ou le rang) de ma cellule passée en revue
Autrement dit, un truc du genre : if maPlage.cellule.position = 5 (ou 18, ou 32....) .
L'objet Range n'a pas de propriété cellule ni position. Il à des propriétés Row et Column.
Si Cel et MaPlage sont des Range, Cel.Row - Maplage.Row + 1 donne, si elle en fait partie, ou non d'ailleurs, le numéro de ligne de Cel dans MaPplage. Cel.Column - MaPlage.Column + 1 le numéro de colonne.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 902
Membres
101 834
dernier inscrit
Jeremy06510