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 Functionedit : correction problème potentiel
Ok, merci pour le code