Dessiner un damier avec VBA-Excel
Bonjour Mesdames et Messieurs,
Je me trouve personnellement devant un casse-tête !
Aidez-moi s'il vous plaît à répondre à ces procédures
je vous remercie
Dessiner un damier
1. Écrire une procédure DessinerDamier(n) qui dessine un damier de n x n cases dans
une feuille de calcul. La hauteur des lignes doit être égale à la largeur des colonnes
(voir Erreur ! Source du renvoi introuvable.).
Remarques :
- Pour modifier la largeur des colonnes d'une plage de cellules, utilisez la propriété
ColumnWidth de l'objet Range et pour modifier la hauteur des lignes d'une plage de
cellules, utilisez la propriété RowHeight de l'objet Range ;
- Attention, ces deux propriétés n'utilisent pas la même unité. La propriété ColumnWidth
utilise la largeur d'un caractère dans le style Normal alors que la propriété RowHeight
utilise le point ;
- La propriété en lecture seule Width de l'objet Range retourne la largeur d'une colonne en
points.
2. Écrire une procédure TestDamier() qui affiche une InputBox() demandant à
l'utilisateur de saisir un entier entre 2 et 10, puis appelle la procédure
DessinerDamier() en lui passant la valeur saisie par l'utilisateur.
La procédure doit vérifier que la valeur saisie est bien un nombre entre 2 et 10 et afficher
l'InputBox tant que l'utilisateur n'a pas saisi une valeur correcte ou tant qu'il n'a pas saisi
"quit". Si l'utilisateur saisit "quit" la procédure TestDamier() ne doit pas appeler la
procédure DessinerDamier().
Mes remerciements à toutes et à tous
Bonsoir Theodulemagloire,
Voir ci-dessous le fichier réalisé pour l'occasion. Accepter les macros puis cliquer sur le bouton gris TestDamier.
Le code des macros est reproduit ci-après.
Sub TestDamier()
Deb:
Nb = InputBox("Entier entre 2 et 10 inclus", "Veuillez entrer un")
'Test d'entier entre 2 et 10 inclus. Plus test entrée vide
On Error GoTo Deb
If Int(Nb) - Nb <> 0 Or Nb < 2 Or Nb > 10 Then MsgBox "Erreur, Recommencez": GoTo Deb
'Appel de l'autre procédure
DessinerDamier (Nb)
End SubSub DessinerDamier(Nb As Integer)
'Effacement du précédent damier
Range("A1:J10").Clear
'Boucle paire Lig/Col
For Col = 1 To Nb
For Lig = 1 To Nb
'Coloration selon modulo 2
Cells(Lig, Col).Interior.Color = IIf((Col + Lig) Mod 2 = 0, RGB(0, 0, 0), xlNone)
Next Lig, Col
End SubBonsoir theodulemagloire
Un essai dans le fichier joint. Cliquer sur le bouton "Hop!"
nota : Avant de lancer Damier, ajuster la largeur de la colonne A. Cette largeur sera la longueur des côtés des cases carrées du damier.
Le code est dans module1:
Sub Hop()
Dim taille
Do While True
taille = False
taille = Application.InputBox("Entrez le nombre de case d'un côté (entre 2 et 10)" & vbLf & _
"Annuler pour abandonner", "Taille du damier", 6, , , , , 1)
If taille = False Then MsgBox "Abandon!": Exit Sub
taille = Int(taille)
If taille >= 2 And taille <= 10 Then Exit Do
Loop
damier taille
MsgBox "La damier à " & taille & " cases de côté a été tracé."
End Sub
Sub damier(ByVal xn As Long)
Dim i&, j&
With ActiveSheet
.Range("a1").Resize(10, 10).Clear
For i = 1 To xn
For j = 1 + (i - 1) Mod 2 To xn Step 2
.Cells(i, j).Interior.Color = vbBlack
Next j
Next i
With .Range("a1")
Rows(1).Resize(xn).RowHeight = .Width
Columns(1).Resize(, xn).ColumnWidth = .ColumnWidth
.Resize(xn, xn).Borders.LineStyle = xlContinuous
End With
End With
End Sub