VBA Excel : test sur une ligne sélectionnée

[Résolu]
Signaler
Messages postés
31
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
4 juillet 2007
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour à tous,

Je suis bloqué dans une application personnelle depuis le début de l'après-midi (ce qui est assez étonnant lorsqu'on arle de VBA, langage plutôt facile d'utilisation). Je vous explique :

- L'utilisateur veut modifier une ligne d'un fichier Excel
- Le programme lui demande de sélectionner (directement dans le fichier Excel par simple clic sur la ligne) la ligne qu'il veut modifier
- Une fonction booléenne macro parcourt toutes les lignes du fichier Excel (qui ne sont pas vides) et vérifie si la ligne est sélectionnée ou non et renvoie la valeur true si sélectionnée, et false si non-sélectionnée.

Voila mon problème, je n'rrive pas à faire le teste pour savoir si une ligne est sélectionnée ou non. Voici le code de la fonction que j'utilise :

Function chercheLigne() As Boolean
   Dim max As Integer


   max = 0

   'controle d'entree de boucle
   ligne = rowMin And max <= 1     'Avec rowMin première ligne du fichier Excel
                                                      'Et max <= 1 car je ne veut qu'un ligne sélectionnée
   While ligne <> rowMax               'rowMax : dernière ligne; les lignes suivantes sont vides

      If ThisWorkbook.Sheets("follow-up").Rows(ligne).EntireRow.Select Then
         chercheLigne = True
         GoTo suite
      Else
         chercheLigne = False
      End If

      'controle de sortie de boucle      ligne ligne + 1                           'Ligne chaque ligne du fichier Excel parcourue

   Wend
suite:
End Function

Voila, j'espère que quelqu'un pourra m'aider. Je vous remercie d'avance.

8 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Alors essaie cette syntaxe :

If ThisWorkbook.Sheets("follow-up").Rows(ligne).EntireRow.Select Then
chercheLigne = True
MsgBox Selection.Row
GoTo suite
Else
chercheLigne = False
End If


Par contre si c'est une seule cellule qui est selectionnée, le numéro de la ligne s'affiche quand même.

(désolé pour le chercheLigne, j'avais pas vu que c'était le nom de ta fonction)

Ouais mais le mien est résistant mais ca fait + de 3 ans que je l'ai et mon ordi je ne l'éteinds jamais.

Par contre j'ai vu des tours muni d'un système de refroidissement à eau !!!
Perso, j'aurai pas confiance : eau + electricité = gros risque

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

Tu peux déclarer dans les déclarations (tout en haut dans le code) ceci :

Public chercheLigne As Boolean

en fait, tu ne l'a pas déclaré. Et le fait de le déclarer en Public dans les déclarations, la variable sera accessible dans les autres procédures du module et dans les autres modules du projet.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
Messages postés
133
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
14 octobre 2011
1
bonsoir,

Sub test()
MsgBox Selection.Row 'renvoie toujours la première ligne sélectionnée
End Sub
A+
Messages postés
31
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
4 juillet 2007
2
Et bien chercheLigne est une fonction, tout comme rowMin et rowMax, et je n'ai pas déclaré ces deux dernières (pourtant elles fonctionnent). Et la variable ligne est déclarée en globale.

Mon problème se situe plutôt du coté de cette condition :

If ThisWorkbook.Sheets("follow-up").Rows(ligne).EntireRow.Select Then
chercheLigne = True
GoTo suite
Else
chercheLigne = False
End If

la première ligne me renvoie toujours la première ligne de mon fichier Excel, quelle que soit la ligne que je sélectionne. Je voudrais sélectionner une ligne, et après avoir cliqué sur un bouton "OK", qu'un msgbox s'affiche en me disant le numéro de la ligne sélectionnée (si la valeur de la fonction chercheLigne est "true"). Je ne sais pas si c'est vraiment clair...
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
AAAAHh

laisse tombé les trois dernieres lignes, ca fait parti d'un autre message que j'ai laissé (copier coller de ma signature mais je me suis loupé)

Encore désolé

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Salut,
dis lis-tu tes posts !!!!!!!
Galopin a raison pas la peine de faire ta boucle pour tester si un ligne est sélectionnée.

Function ChercheLigne() As Boolean



With aplication
If .Selection.Rows.Count > 1 Then
    MsgBox "vous devez sélectionner une seule ligne"
    ChercheLigne = False
    Exit Function
ElseIf .Selection.Rows.Count = 1 Then
    ChercheLigne = True
ElseIf .Selection.Rows.count <= 0 Then
    ChercheLigne = False



End If



MsgBox .Selection.Row
End With
End Function

Cordialement, Jean-Paul  

______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
31
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
4 juillet 2007
2
Merci à tous!

PS : valtrase, un petit conseil sois moins agressif, je suis reconnaissant à tout le monde pour ces réponses, mais la réponse de galopin ne fonctionne pas je l'ai essayé de 36000 manières différentes cet après midi et ca ne fonctionnait pas.

merci pour ta réponse mortalino!
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut haplo67. C'est cadeau, ça fait plaisir !

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !