Problème de collage scrabble

Bonjour

Dans mon fichier j'ai 2 macros DoubleHoriz et DoubleVertical . j'ai une plage (C3:Q17) dans laquelle je met des lettres (qui ont une valeur) selon si j'écris en horizontal les valeurs des lettres doivent se mettre en plage C20:Q34 cela fonctionne bien .

Sauf que quand je met des lettres en vertical dont leur valeur doit se mettre en plage C37:Q51 elles se mettent en plage C20:Q34 .

Je ne vois pas ce qui peut clocher pour le vertical

Voir le fichier , merci pour votre aide

8v3.xlsm (37.56 Ko)

Vous pouvez vérifier votre fichier, chez moi l'horizontal ne marche pas. J'ai entré AZERTY en horizontal en F7, rien ne s'affiche.

Bonjour,

Pour ce qui est du code vertical, moi je passerais par un indice de ligne (i) tout simplement afin de faire correspondre la ligne de lecture a la ligne d'écriture de manière simple et naturelle. Car sinon j'ai l'impression que ton code va écrire "en haut" de la grille verticale, au lieu de "en face". Ensuite, puisque tu compares en minuscules il faut utilise LCase (lower case) pas UCase (UPPER CASE).

Une proposition de refactor par Copilot suivant ces instructions :

Pour moi c'est vraiment le For Each qui porte à confusion plutôt que d'utiliser l'indice de ligne.

PS : il y a aussi le nom de variable "cell" que j'éviterai car très proche de "Cells" qui est un mot-clé. Cependant c'est ok, pas source de problème ici.

Sub DoubleVertical()
    Dim ws As Worksheet
    Dim targetRange As Range          ' Plage d'entrée : C3:C17
    Dim outputRange As Range          ' Plage de sortie : C37:C51
    Dim i As Long                     ' Itérateur d'index (1..Rows.Count)
    Dim cell As Range
    Dim letter As String
    Dim letterValue As Long
    Dim triggerMacro As Boolean

    On Error GoTo SafeExit

    Set ws = ThisWorkbook.Sheets("JEU")
    Set targetRange = ws.Range("C3:C17")
    Set outputRange = ws.Range("C37:C51")

    ' Vérification de cohérence (les 2 plages doivent avoir le même nombre de lignes)
    If targetRange.Rows.Count <> outputRange.Rows.Count Then
        MsgBox "Les plages C3:C17 et C37:C51 n'ont pas la même hauteur.", vbExclamation, "DoubleVertical"
        Exit Sub
    End If

    Application.EnableEvents = False

    ' -------- Détection du déclencheur (mêmes règles que ton code initial) ----------
    For i = 1 To targetRange.Rows.Count
        Set cell = targetRange.Cells(i, 1)

        If cell.Interior.Color = RGB(255, 204, 153) And Len(cell.Value2) > 0 Then
            ' Voisin du dessus (i-1) ou du dessous (i+1) non vide dans la même plage
            If (i > 1 And Len(targetRange.Cells(i - 1, 1).Value2) > 0) Or _
               (i < targetRange.Rows.Count And Len(targetRange.Cells(i + 1, 1).Value2) > 0) Then
                triggerMacro = True
                Exit For
            End If
        End If
    Next i

    ' ----------------------- Traitement principal -----------------------------------
    If triggerMacro Then
        For i = 1 To targetRange.Rows.Count
            Set cell = targetRange.Cells(i, 1)

            If cell.Interior.Color = RGB(255, 204, 153) And Len(cell.Value2) > 0 Then
                ' Convertir en minuscule, car on compare en minuscules
                letter = LCase$(CStr(cell.Value2))
                letterValue = 0

                ' Attribution de la valeur selon la lettre
                Select Case letter
                    Case "l", "n", "r", "s", "t", "a", "e", "i", "o", "u"
                        letterValue = 1
                    Case "d", "g", "m"
                        letterValue = 2
                    Case "b", "c", "p"
                        letterValue = 3
                    Case "f", "h", "v"
                        letterValue = 4
                    Case "j", "q"
                        letterValue = 8
                    Case "k", "w", "x", "y", "z"
                        letterValue = 10
                    Case Else
                        letterValue = 0     ' Non pris en charge
                End Select

                ' Écriture au même index dans la plage de sortie (C3?C37, C4?C38, ...)
                outputRange.Cells(i, 1).Value = letterValue
            Else
                ' (Optionnel) Effacer la cellule de sortie correspondante
                ' outputRange.Cells(i, 1).ClearContents
            End If

            ' (Optionnel) Débogage
            ' Debug.Print "Ligne i=" & i & "  src=" & cell.Address & " -> dst=" & outputRange.Cells(i, 1).Address & _
            '            "  lettre='" & letter & "'  valeur=" & letterValue
        Next i
    Else
        ' Debug.Print "Aucune cellule n'a déclenché la macro."
    End If

SafeExit:
    Application.EnableEvents = True
    If Err.Number <> 0 Then
        MsgBox "Erreur: " & Err.Description, vbExclamation, "DoubleVertical"
    End If
End Sub

@Optimix :

Vous pouvez vérifier votre fichier, chez moi l'horizontal ne marche pas. J'ai entré AZERTY en horizontal en F7, rien ne s'affiche.

Il y a aussi la vérification cell.Interior.Color = RGB(255, 204, 153)

Bonjour à tous

Merci pour vos réponses

Crdlt

Rechercher des sujets similaires à "probleme collage scrabble"