Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 VBA Définition d'un Range avec numéros de cellule

Héraclite

XLDnaute Nouveau
Bonjour,
Je suis en train d'essayer de créer une macro pour résoudre les sudokus. Dans mon code j'aimerais ne pas avoir de Range défini par lettres et numéros de colonne mais uniquement par des références à des cellules, j'ai transformé partout les Ranges et ça marche sauf à un endroit :

If compteur2 = 8 Then
For Each cell In Range("M1:O3") 'ça marche
If cell.Interior.ColorIndex <> 3 Then
Cells(1, 2).Value = cell.Value
Cells(1, 2).Font.Bold = True
Cells(1, 2).Font.ColorIndex = 5
End If
Next cell
End If

If compteur2 = 8 Then
For Each cell In Range(Cells(1, 13), Cells(3, 16)) 'ça marche pas
If cell.Interior.ColorIndex <> 3 Then
Cells(1, 2).Value = cell.Value
Cells(1, 2).Font.Bold = True
Cells(1, 2).Font.ColorIndex = 5
End If
Next cell
End If

Est-ce que quelqu'un comprend pourquoi merci d'avance !
 

Phil69970

XLDnaute Barbatruc
Bonjour @Héraclite

A essayer
VB:
If compteur2 = 8 Then
    For Each cell In Range(Cells(1, 13), Cells(3, 15))
 '*********
 'Pour verif
    MsgBox Range(Cells(1, 13), Cells(3, 15)).Address
 '**********
        If cell.Interior.ColorIndex <> 3 Then
            Cells(1, 2).Value = cell.Value
            Cells(1, 2).Font.Bold = True
            Cells(1, 2).Font.ColorIndex = 5
        End If
    Next cell
End If

@Phil69970
 

Staple1600

XLDnaute Barbatruc
Bonsoir

Comme remarqué par Phil, la lettre O est la quinzième lettre de l'alphabet
Ce que confirme ce petit test
VB:
Sub test()
MsgBox Range(Cells(1, 13), Cells(3, 15)).Address
End Sub

EDITION: Houps, j'avions point vu le Pour vérif
mais je vois donc qu'on utilise tous les deux cette fameuse MsgBox pour déboguer nos codes
(et on n'est pas les seuls )
 

Héraclite

XLDnaute Nouveau
Merci beaucoup,
j'étais pourtant sûr que j'avais bien compté mes lettres, désormais ça fonctionne et en plus j'ai appris le .Address. Merci à tous, si un jour la macro résoud des sudokus de A à Z J'l'enverrais sur le site bye
 

Staple1600

XLDnaute Barbatruc
Bonjour Heraclite, Phil, sylvanu

Sauf erreur, la boucle écrase à chaque fois la valeur précédente
Voir cette variante
VB:
Sub kk()
Dim cell As Range
compteur2 = 8 'pour test
Application.ScreenUpdating = False
[B1].Font.Bold = True: [B1].Font.ColorIndex = 5
If compteur2 = 8 Then
    For Each cell In Range(Cells(1, 13), Cells(3, 15))
        If cell.Interior.ColorIndex <> 3 Then
        tmp = tmp & ";" & cell.Value
        End If
    Next cell
End If
[B1] = Mid(tmp, 2)
End Sub
 

Discussions similaires

Réponses
2
Affichages
329
Réponses
1
Affichages
432
Réponses
21
Affichages
807
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…