Trouver Les lignes et colonnes d'une plage de cellules

Bonjour,

Je suis novice en VBA Excel

Je cherche le moyen de connaître les coordonnées d'une plage de cellules sélectionnées :

La ligne Supérieure

La ligne Inférieure

La colonne de droite

La colonne de gauche

Le but est de savoir si la plage sélectionnée correspond à mon souhait

Salut Jean,

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
iRow1 = Target.Cells(1, 1).Row
iCol1 = Target.Cells(1, 1).Column
'
iRow2 = Target.Cells.Rows.Count + iRow1 - 1
iCol2 = Target.Cells.Columns.Count + iCol1 - 1

sCol1 = Split(Columns(iCol1).Address(ColumnAbsolute:=False), ":")(1)
sCol2 = Split(Columns(iCol2).Address(ColumnAbsolute:=False), ":")(1)
'
MsgBox "Ligne TOP : " & iRow1 & Chr(10) & "Ligne BOTTOM : " & iRow2 & Chr(10) & _
        "Colonne LEFT : " & iCol1 & " / " & sCol1 & Chr(10) & "Colonne RIGHT : " & iCol2 & " / " & sCol2
'
End Sub

Avec plaisir!

A+

84xy-target.xlsm (15.12 Ko)

Bonjour @curulis57

Merci pour la réponse et l'exemple.

Etant novice, je ne comprends pas tous les mots :

Target

Split

ColumnAbsolute

Je ne comprends pas ;

i devant Row et Col

s devant Col

Désolé de poser ces questions mais je voulais bien comprendre toute la procédure privée pour réutiliser les arguments dans le futur

Meri de cette procédure qui correspond parfaitement à ma recherche

Salut Jean,

attention, si tu prends goût à VBA, s'en est foutu de ta vie familiale!

TARGET est un mot réservé de VBA = cible et représente la cellule que tu viens de cliquer

  • Target.Address représente les coordonnées de la cellule : p.ex. A6
  • Target.Value représente sa valeur
  • Target.Row représente la ligne de la cellule cliquée
  • ...
SPLIT est un mot réservé de VBA : fonction qui renvoie un tableau des différentes valeurs rencontrées dans une chaîne séparées par un séparateur décidé par l'utilisateur.
  • x = Split ("VBA/MACRO", "/")(0) renverra VBA
  • y = Split ("VBA/MACRO", "/")(1) renverra MACRO

sCol1 = Split(Columns(iCol1).Address(ColumnAbsolute:=False), ":")(1)

Là, je n'ai rien inventé! J'ai trouvé ce code sur la Toile et je m'en sers (tout le temps) pour convertir un numéro de colonne (Target.Column = ) en sa lettre.

En l'état actuel de mes connaissances, j'aurais été bien incapable de pondre cette fonction!

Pourquoi un i ou un s devant certains mots ?

Ce sont des variables que j'utilise systématiquement et qui me renseignent (bien que j'ai la sale habitude de ne pratiquement jamais déclarer mes variables) sur la nature de cette variable.

  • iRow : i comme INTEGER : c'est la variable qui me désigne la dernière ligne avec une valeur
  • iCol =
  • sCol ou sCol1 ou sCol2 : s comme STRING : sont les variables expliquées avec SPLIT.
  • mais utiliser 'madernièrejolielignedemacolonnemignonne' est parfaitement valable aussi... si tu aimes bien taper un code poétique!

Bienvenue dans VBA!

Passer des nuits blanches à pianoter des Target est une autre sorte de jouissance nocturne... interminable! Le pied!

A+

Bonjour,

curulis57,

...bien que j'ai la sale habitude de ne pratiquement jamais déclarer mes variables...

et ça c'est pas bien de ne pas déclarer ses variables !

il est vrai que l'emploi de la la fonction Split() pour extraire les lettres de l'adresse est le plus simple mais il est possible de se faire ses propres fonctions comme ci-dessous :

Sub Test()

    MsgBox LettreCol(Range("AA125").Address)

End Sub

Function LettreCol(ByVal Adr As String) As String

    Dim I As Integer

    'supprime les dollars
    Adr = Replace(Adr, "$", "")

    'recherche le premier caractère numérique
    'et sitôt trouvé, fin de boucle
    For I = 1 To Len(Adr): If IsNumeric(Mid(Adr, I, 1)) Then Exit For: Next I

    'retourne le résultat
    LettreCol = Left(Adr, I - 1)

End Function

Bonjour,

Pour le fun.

Cdlt.

79xlp-jeanf44.xlsm (23.20 Ko)

Bonjour,

on peut même en réduire 2 jean-philippe

        Msg = Msg & "Dernière colonne : " & Rng(Rng.Cells.Count).Column & Chr(10)
        Msg = Msg & "Dernière ligne : " & Rng(Rng.Cells.Count).Row & Chr(10)

eric

Re bonjour @curulis57

Votre procédure me convient mais je n'arrive pas à l'appeler d'un autre procédure.

En plus je voulais mettre des conditions tels que :

La 1ière ne soit pas inférieure à 5

La dernière ligne ne soit pas supérieure à 10

La 1ière colonne ne soit pas inférieure à B

La dernière colonne ne soit pas supérieure à E

Re bonjour @Jean-Eric

J'avais oublié de spécifier que les cellules étaient vides et juste selectionné

Re,

Un nouvel exemple à adapter [Feuil1 (3)].

Cdlt.

67xlp-jeanf44.xlsm (33.45 Ko)

Pourquoi je t'ai appelé jean-philippe ? Suis fatigué moi, toutes mes confuses

Bonsoir @Jean-Eric

Merci pour le fichier.

C'est parfait pour mon besoin.

Encore merci

Bonjour @JeanEric

Dans votre fichier, je viens de m'apercevoir d'une petite anomalie

Feuil1 - Macro : DEMO

Quand je sélectionne les cellules autour des cellules non vides, la macro m'affiche quand même les coordonnées et l'adresse de la zone sélectionnée.

J'ai mis les zones avec un fond de cellules en pointillé.

25xlp-jeanf44.xlsm (29.96 Ko)

Re,

Teste ceci et adapte :

Sub Test()

    Dim Texte As String

    With Selection

        Texte = "La ligne Supérieure est : " & .Row & vbCrLf
        Texte = Texte & "La ligne Inférieure est : " & .Row + .Rows.Count - 1 & vbCrLf
        Texte = Texte & "La colonne de gauche est : " & .Column & " (colonne " & Split(.Address, "$")(1) & ")" & vbCrLf
        Texte = Texte & "La colonne de droite est : " & .Column + .Columns.Count - 1
        If InStr(.Address, ":") <> 0 Then Texte = Texte & " (colonne " & Split(.Address, "$")(3) & ")" & vbCrLf Else Texte = Texte & " (colonne " & Split(.Address, "$")(1) & ")" & vbCrLf
        Texte = Texte & "L'adresse de la plage est : " & .Address(0, 0)

    End With

    MsgBox Texte

End Sub
Rechercher des sujets similaires à "trouver lignes colonnes plage"