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

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
288 581
Messages
1 893 171
Membres
169 777
dernier inscrit
Bazilecr
Haut Bas