Problème code pour remplir des cellules

Bonjour à tous et tous mes vœux pour cette année 2024, surtout la santé !!

j'ai un code qui fonctionne mal. En fait j'ai des cellules avec un symbole "@" et des cellules vides, je souhaiterai que dans les cellules vides il marque le nombre de cellules qui leur sont adjacentes avec un signe "@". Le code que j'ai, écris n'importe quoi. Il me met des 0 quand il y a des cases adjacentes avec un "@" et il me marque 2 quand il y a 3 cases adjacentes, etc ......

Franchement merci d'avance pour l'aide.

Sub Bouton2_Cliquer()
Dim rng As Range
Dim cell As Range

' Récupérer les valeurs des cellules indiquant le nombre de cases à l'horizontale et à la verticale
gridSizeX = Sheets("Matrice").Range("Z5").Value
gridSizeY = Sheets("Matrice").Range("Z7").Value

' Séléctionner la plage de la grille (assurez-vous que cette plage est vide au départ)
Set rng = Sheets("Matrice").Range("B2").Resize(gridSizeY, gridSizeX)

' ... (le reste du code reste inchangé)

' Boucle pour remplir les cellules vides avec le nombre de cellules "@" tangentes
For Each cell In rng
If cell.Value = "@" Then ' Laisser les cellules avec "@" inchangées
ElseIf cell.Value = 0 Then ' Vérifier si la cellule est vide
' Trouver le nombre de cellules "@" tangentes à la cellule
adjacentCount = CountAdjacentAtSigns(rng, cell.row, cell.column)
cell.Value = adjacentCount ' Remplacer la cellule vide par le nombre de cellules "@" tangentes
End If
Next cell
End Sub

Function CountAdjacentAtSigns(rng As Range, row As Integer, column As Integer) As Integer
' Compter le nombre de cellules "@" tangentes à la cellule spécifiée
Dim count As Integer
Dim i As Integer, j As Integer

For i = -1 To 1
For j = -1 To 1
If i <> 0 Or j <> 0 Then ' Exclure la cellule centrale
If IsInRange(rng, row + i, column + j) Then ' Vérifier si la cellule est dans la plage
If rng.Cells(row + i, column + j).Value = "@" Then
count = count + 1
End If
End If
End If
Next j
Next i

CountAdjacentAtSigns = count
End Function

Function IsInRange(rng As Range, row As Integer, column As Integer) As Boolean
' Vérifier si la cellule spécifiée est dans la plage
IsInRange = row >= rng.row And row <= rng.Rows.count + rng.row - 1 And _
column >= rng.column And column <= rng.Columns.count + rng.column - 1
End Function

bonjour,

proposition de correction. A l'avenir, pense à utiliser les balises code pour mettre tes macros (bouton </>)

Sub Bouton2_Cliquer()
    Dim rng As Range
    Dim cell As Range

    ' Récupérer les valeurs des cellules indiquant le nombre de cases à l'horizontale et à la verticale
    gridSizeX = Sheets("Matrice").Range("Z5").Value
    gridSizeY = Sheets("Matrice").Range("Z7").Value

    ' Séléctionner la plage de la grille (assurez-vous que cette plage est vide au départ)
    Set rng = Sheets("Matrice").Range("B2").Resize(gridSizeY, gridSizeX)

    ' ... (le reste du code reste inchangé)

    ' Boucle pour remplir les cellules vides avec le nombre de cellules "@" tangentes
    For Each cell In rng
        If cell.Value = "@" Then ' Laisser les cellules avec "@" inchangées
        ElseIf Len(cell.Value) = 0 Then ' Vérifier si la cellule est vide
            ' Trouver le nombre de cellules "@" tangentes à la cellule
            adjacentCount = CountAdjacentAtSigns(rng, cell.row, cell.column)
            cell.Value = adjacentCount ' Remplacer la cellule vide par le nombre de cellules "@" tangentes
        End If
    Next cell
End Sub

Function CountAdjacentAtSigns(rng As Range, row As Integer, column As Integer) As Integer
    ' Compter le nombre de cellules "@" tangentes à la cellule spécifiée
    Dim count As Integer
    Dim i As Integer, j As Integer

    For i = -1 To 1
        For j = -1 To 1
                If IsInRange(rng, row + i, column + j) Then ' Vérifier si la cellule est dans la plage
                    If rng.Parent.Cells(row + i, column + j).Value = "@" Then
                        count = count + 1
                    End If
                End If
        Next j
    Next i

    CountAdjacentAtSigns = count
End Function

Function IsInRange(rng As Range, row As Integer, column As Integer) As Boolean
    ' Vérifier si la cellule spécifiée est dans la plage
    IsInRange = row >= rng.row And row <= rng.Rows.count + rng.row - 1 And _
    column >= rng.column And column <= rng.Columns.count + rng.column - 1
End Function

edit : correction problème potentiel

Ok, merci pour le code

Rechercher des sujets similaires à "probleme code remplir"