Choisir cellule avec souris

Résolu
Pierre3499 Messages postés 207 Statut Membre -  
Pierre3499 Messages postés 207 Statut Membre -
Bonjour,

je débute sous VBA, j'ai fait des petits jeux sous vba dont puissance 4. qui tourne très bien en utilisant le clavier commande : x = Application.InputBox("choisir la colonne", Type:=1) je voudrais savoir comment je peux remplacer cette commande (attente chiffre clavier) par la souris (attente sélection bas de colonne).

j'ai fait ça dans le worksheet :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
do
If Target = Range("c11") Then
x = 1
End If
....
If Target = Range("i11") Then
x = 7
End If
loop until x<>0

Range("c13") = x ' afficher valeur de x
End Sub

la fonction "do...until" c'est pour forcer le choix à ces cellules et aucune autre. mais je peux le faire dans la macro principale

mais j'arrive pas à l' intégrer/interagir/appeler/activer dans la macro principale

Ma question comment je fais pour appeler ce sous programme au moment voulu.
quelque chose m'échappe j'arrive à appeler un autre "sous prog" tout con (MsgBox "test réussi"), mais pas celui là.

Merci d'avance à celui qui arrivera à m'aider. ce là me permettra d’optimiser mes jeux et faire d'autre (morpion plus rapide à la souris que rentré coordonnée) ;-)

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,
    Sans la macro principale et ou le classeur, on ne peut rien faire !

    en attendant petite simplification du code événementiel
    Option Explicit
    '------------------------------------
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("C11:I11")) Is Nothing Then Range("C13") = Target.Column - 2
    End Sub


     Michel
    0
    1. Pierre3499 Messages postés 207 Statut Membre 8
       
      ok merci de votre réponse
      bon j'ai réussi à appeler la sous macro mais j'ai pas le temps de sélectionner case souhaiter à ce moment là
      il faut que je définisse à tout prix x c'est pas le cas pour le moment

      Macro de test si ça elle fonctionne là je l’insère à la place
      x = Application.InputBox("choisir la colonne", Type:=1)


      Sub jeuxP4calculb()
      MsgBox "c parti"
      x = 0

      Do
      Call Worksheet_SelectionChange(Range("c11:i11"))

      Range("c12") = "" 'pour me prévenir que je suis de retour dans la macro principale

      MsgBox "choix fait" 'là pour me permettre d'arrêter la boucle en cas de soucis

      x = range("c13")

      'vérification que x compris 1 et 7
      For i = 1 To 7
      If x = i Then
      MsgBox "x : " & x
      End If
      Next i

      Loop Until x <> 0

      End Sub




      Private Sub Worksheet_SelectionChange(ByVal Target As Range)

      Range("c12") = "ATTENTE choix"
      If Not Intersect(Target, Range("C11:I11")) Is Nothing Then Range("C13") = Target.Column - 2

      End Sub



      j'espere que ça va vous aider, et j'espère que vous arriveriez à trouver le hic


      PS qd la macro principal ne tourne pas le sous prog fonctionne nickel ! ! ! merci de votre astuce
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    "selectionchange":
    macro dite "événementielle" qui se déclenche quand on clique sur une cellule et doit être installée dans le module feuille concerné...

    donc
    Call Worksheet_SelectionChange(Range("c11:i11")) est faux avec le call et le param^tre C11:E11 est fantaisiste à souhait

    Quand tu ne connais pas un truc, tu fais une petite maquette sur un nouveau classeur, tu fais un copier de ce que je t'ai donné, clic droit sur le nom d'onglet -visualiser le code- coller
    si tu as fait la manip sur feuil1 dans l"editeur vba la macro se trouve dans le module feuil1...

    tu fais un essai et tu regardes ce que ca donne et si ca correspond à ce que tu veux faire: on a tous fait ça et on continue de le faire !

    Pour toi, 1° chose à faire
    pour apprendre VBA
    https://excel.developpez.com/cours/?page=prog#environnement
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Bonjour Michel,
    Excuse l'incruste.

    Pour sélectionner une cellule "à la souris", tu peux également voir du côté de la méthode Application.InputBox. Voir ICI.

    Un exemple pour toi :
        Sub Principale()
        Dim maColonn As Integer
        
            maColonn = Choix_Colonne
            If maColonn > 0 Then
                MsgBox "Vous avez choisi la colonne : " & maColonn
            Else
                MsgBox "Erreur de sélection"
            End If
        End Sub
        
        Private Function Choix_Colonne() As Integer
        Dim Col As Integer, Cell_Cliquee As Range
        
            On Error GoTo Fin
            Set Cell_Cliquee = Application.InputBox("Sélectionnez une colonne", "Sélection", Type:=8)
            On Error GoTo 0
            If Cell_Cliquee.Columns.Count > 1 Then GoTo Fin
            Choix_Colonne = Cell_Cliquee.Column
            Exit Function
    Fin:
            Choix_Colonne = 0
        End Function

    0
    1. Pierre3499 Messages postés 207 Statut Membre 8
       
      dslé de mon silence soucis pc.
      merci de venir apporter votre aide,
      effectivement c'est une solution de secours: ce n'était pas tout à fait ça que je voulais,
      J'aurais voulu un peu plus automatisé comme me proposer Michel je clique et il y a une action, là il y a un ok à faire en plus(.... mais ça me permet d'être sur du coup joué.... )

      Mais ça fonctionne bien et ça ne perturbe pas ce que j'ai déjà écrit .
      Merci Pijaku
      0
    2. Pierre3499 Messages postés 207 Statut Membre 8
       
      est ce que c'est possible de récupérer coordonnées (colonne et ligne)d'un clic souris
      colonne et ligne. c'est pour un autre jeux j'ai besoin de x et y
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Pierre3499 Messages postés 207 Statut Membre
         
        Bonjour,

        Pas très difficile, tu avais les bases au-dessus :

        Option Explicit
        
        Dim Col As Integer, Lig As Integer
        
            Sub Principale()
            Dim Choix_Cell As Boolean
            
                Choix_Cell = Click_Cellule
                If Choix_Cell = True Then
                    MsgBox "Vous avez choisi la cellule : Cells(" & Lig & ", " & Col & ")"
                Else
                    MsgBox "Erreur de sélection"
                End If
            End Sub
            
            Private Function Click_Cellule() As Boolean
            Dim Cell_Cliquee As Range
            
                On Error GoTo Fin
                Set Cell_Cliquee = Application.InputBox("Sélectionnez une cellule", "Sélection", Type:=8)
                On Error GoTo 0
                If Cell_Cliquee.Columns.Count > 1 Or Cell_Cliquee.Rows.Count > 1 Then GoTo Fin
                Col = Cell_Cliquee.Column
                Lig = Cell_Cliquee.Row
                Click_Cellule = True
                Exit Function
        Fin:
                Click_Cellule = False
            End Function
        0
    3. Pierre3499 Messages postés 207 Statut Membre 8
       
      Merci de votre reponse.
      Après soucis PC j'ai soucis internet enfin bref
      J'ai réussi de façon détourné
      Mais je vais réutiliser votre solution pour que ça soit moins bancale, plus présentable.
      Avec vos deux solutions la vôtre et celle de Michel j'ai pu optimiser mes jeux en cours et même créer de nouveaux jeux.

      J'aurai une Autre question
      Il y a t il une fonction pour reconnaître les touches Directionnelles / pavé numérique/ espace/.../ crtl
      0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Il aurait été + efficace de lancer une autre discussion, la question n'ayant rien à voir avec celle ci....

    je ne suis pas l'auteur de ce pdf sur les sendkeys
    http://www.cjoint.com/c/FDxhYhEjyRt
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut.
      En effet, il convient de poser la question sur un nouveau sujet.
      J'ajouterai que ça manque de précision. En effet, cela dépend de l'objet à partir duquel tu souhaites intercepter l'appui sur une touche. C'est très simple si cet objet est un contrôle, plus délicat s'il s'agit d'un Range, WorkSheet ou WorkBook...
      Donc : nouveau sujet, plus détaillé stp.
      j'ajouterai également de revenir plus souvent, et pas que quand tu as un autre souci...

      --
      0
    2. Pierre3499 Messages postés 207 Statut Membre 8
       
      OK merci de vos aides . une une fois que j'aurais mieux cerné ce que je souhaite faire je créerai un nouveau post.

      J'ai pas compris Pijaku : j'ajouterai également de revenir plus souvent, et pas que quand tu as un autre soucis ....

      J'ai laissé ce post car je n'avais pas trouvé de solution sur d'autre forum. Mais grâce à vous je commence à comprendre les différents type de private , ainsi que récupéré des infos à partir des range

      PS : je fais ça en loisir donc effectivement par moment je ne programme plus et je dois laisser à contre coeur la programmation car j'ai d'autre priorité.
      Je viens d'installer l'apli ccm au moins je serais au courant des réponses à mes posts.

      Merci encore de vos aide
      0