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

Fermé
Robert2267 Messages postés 8 Date d'inscription dimanche 7 juin 2020 Statut Membre Dernière intervention 19 août 2021 - 9 juin 2020 à 12:32
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 11 juin 2020 à 08:44
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.
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
10 juin 2020 à 11:26
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
yg_be Messages postés 23400 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 décembre 2024 Ambassadeur 1 557
10 juin 2020 à 11:32
bonjour, peux-tu montrer ton code?
0
Robert2267 Messages postés 8 Date d'inscription dimanche 7 juin 2020 Statut Membre Dernière intervention 19 août 2021
Modifié le 11 juin 2020 à 08:34
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
yg_be Messages postés 23400 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 décembre 2024 1 557 > Robert2267 Messages postés 8 Date d'inscription dimanche 7 juin 2020 Statut Membre Dernière intervention 19 août 2021
Modifié le 10 juin 2020 à 19:09
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
yg_be Messages postés 23400 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 décembre 2024 1 557 > Robert2267 Messages postés 8 Date d'inscription dimanche 7 juin 2020 Statut Membre Dernière intervention 19 août 2021
10 juin 2020 à 19:05
merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
11 juin 2020 à 08:44
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