VBA Excel. Notion de déplacement du pointeur sur le cellules

Robert2267 Messages postés 10 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour chers membres.
J'ai un petit soucis.
En VBA, j'ai conçu un jeu pareil au jeu de dame. Je déplace le bouton macro avec la commande activecels. Dont je met entre parenthèses 1,0 pour faire déplacer.
mais ce que je veux ce n'est pas ça.
j'aimerais que dès que je clique sur le bouton, le pointeur de cellule se déplacer à un clic jusqu'à la fin donc la dernière cellule coloré.

Au total je prend 10cellules sur 10 celles colorées différemment.
comme rouge et bleu.

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Voici un code qui te place le curseur dans le coin supérieur gauche de la cellule Feuil1 B22.
    Tu lances la procédure "Positionne" et, après, à toi de l'adapter à ta situation...

    Option Explicit
    
    '---- Déterminer les coordonnées en pixels, par rapport à l'écran, du coin supérieur gauche d'une cellule Excel
    Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Type position
        Left As Integer
        Top As Integer
    End Type
    Private Const GARDEFOU As Byte = 20
    
    Sub Positionne()
        Place_Curseur Sheets("Feuil1").Range("B22")
    End Sub
    
    Private Sub Place_Curseur(Cellule As Range)
    Dim PosCur As position, p As Pane
        
        Set p = QuelPane(Cellule, True)
        If Not p Is Nothing Then
            PosCur = TopLeftCellule(p, Cellule, False)
            SetCursorPos PosCur.Left, PosCur.Top
        End If
        Set Cellule = Nothing
        Set p = Nothing
    End Sub
    Private Function TopLeftCellule(ByVal LePane As Pane, ByVal rng As Range, Optional ByVal DansLaCellule As Boolean = True) As position
    Dim cel As Range, cc As Byte, cr As Byte, L As Integer, t As Integer, B As Integer, R As Integer, IniL As Integer, INIT As Integer, IniR As Integer, IniB As Integer
        With LePane
            If rng.Column = .ScrollColumn Then cc = 0 Else cc = 5
            If rng.Row = .ScrollRow Then cr = 0 Else cr = 5
            L = .PointsToScreenPixelsX(rng.Left) - cc: IniL = L
            t = .PointsToScreenPixelsY(rng.Top) - cr: INIT = t
            R = .PointsToScreenPixelsX(rng.Offset(1, 1).Left) - cc: IniR = R
            B = .PointsToScreenPixelsY(rng.Offset(1, 1).Top) - cr: IniB = B
            On Error Resume Next
            Set cel = ActiveWindow.RangeFromPoint(L, t)
            Do Until cel.Left >= rng.Left
                L = L + 1
                If L > IniL + GARDEFOU Then GoTo BoucleInfinie
                Set cel = ActiveWindow.RangeFromPoint(L, t)
            Loop
            Do Until cel.Top >= rng.Top
                t = t + 1
                If t > INIT + GARDEFOU Then GoTo BoucleInfinie
                Set cel = ActiveWindow.RangeFromPoint(L, t)
            Loop
            Set cel = Nothing
        End With
        TopLeftCellule.Left = IIf(DansLaCellule, L, L - 1)
        TopLeftCellule.Top = IIf(DansLaCellule, t, t - 1)
        Exit Function
    BoucleInfinie:
        MsgBox "Conditions impossibles pour le positionnement du curseur"
    End Function
    
    Private Function QuelPane(ByVal t As Range, Optional ByVal ActivationFeuil As Boolean = False) As Pane
    Dim LngNbPanes As Long, LngPane As Long
        If ActiveWindow.VisibleRange.Worksheet.Parent.Name = t.Worksheet.Parent.Name Then
            If ActiveWindow.ActiveSheet.Name = t.Worksheet.Name Or ActivationFeuil Then
                t.Worksheet.Activate
                LngNbPanes = ActiveWindow.Panes.Count
                For LngPane = 1 To LngNbPanes
                    With ActiveWindow.Panes(LngPane)
                        If Not Intersect(t, .VisibleRange) Is Nothing Then
                            Set QuelPane = ActiveWindow.Panes(LngPane)
                            Exit Function
                        End If
                    End With
                Next
            End If
        End If
        Set QuelPane = Nothing
    End Function
    '---- <> Déterminer les coordonnées en pixels, par rapport à l'écran, du coin supérieur gauche d'une cellule Excel <>
    

    0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, peux-tu montrer ton code?
    0
    1. Robert2267 Messages postés 10 Statut Membre
       
      voici les codes VBA.
      Sub Dame()
              Dim ligne,  colonne As Integer 
                       ligne =1
                       For ligne= 1 To 10
                        For Colonne= 1 To 10
                              If (colonne + ligne)  Moi 2 =0 Then
                        cells(ligne, colonne). Interior.Color = vbBlue
             Else
              Cells(ligne, colonne).Interior. color = vbYellow
               If (Range("A1").Select = True)  Then
                     End If
               End If
            Next colonne
            Next ligne
      End Sub

      '----- Les codes si-dessus sont pour colorer les cellules (bleu et jaune), de la première cellule jusqu'à la 10ème. Dès gauche à droite et de haut en bas ---------'
      __________________________________________
      C'est ici que j'ai une préocupation .

      Je suis devant la feuille Excel.
      L'onglet DÉVELOPPEUR pour insérer un bouton macro. Bouton Insérer et je prends macro qui est le premier bouton ; j'insère le bouton et je n'affecte pas.

      Je lance Visual Basic pour saisir le code qui va me permettre à déplacer le curseur de gauche à droite. Comme je peux le faire de l'iverse et de haut en bas.

      Codes
      Sub gauche()
             ActiveCell.Offset(-1, 0).Select
      End Sub

      J'
      '
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Robert2267 Messages postés 10 Statut Membre
         
        pas très clair. tu veux te déplacer de plusieurs cases en un clic? si oui, jusqu'où?
        n'hésite pas à donner un exemple.

        à tout hasard:
        Sub gauche()
        Cells(selection.row,1).Select
        End Sub
        0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    J'avais très mal compris la demande.
    Voyons si je comprends mieux maintenant...

    Tu veux "construire" ton damier en coloriant en bleu et jaune tes cellules.
    C'est bien cela?
    Voici pour toi, bien flashi!

    Sub Damier()
    Dim ligne As Integer, colonne As Integer
    With Sheets("Feuil1")
        For ligne = 1 To 10 Step 2
            For colonne = 1 To 10 Step 2
                .Cells(ligne, colonne).Interior.Color = vbBlue
                .Cells(ligne, colonne + 1).Interior.Color = vbYellow
                .Cells(ligne + 1, colonne).Interior.Color = vbYellow
                .Cells(ligne + 1, colonne + 1).Interior.Color = vbBlue
            Next colonne
        Next ligne
    End With
    End Sub


    Par contre, petite remarque perso, si tu veux créer un jeu de dames et que tu bloques déjà à ce niveau, ça va pas être facile....
    0