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
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