Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/08/2011, 00h19   #1
Invité régulier
 
Femme
Etudiante
Inscription : avril 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Etudiante
Secteur : Santé

Informations forums :
Inscription : avril 2011
Messages : 14
Points : 9
Points : 9
Par défaut Colorier une zone imposé par l'utilisateur

Bonsoir,
J'ai encore une petite question concernant mes mini programme!

Écrire une macro « colorier_rouge » qui demande à l’utilisateur une valeur entière N puis qui colore à partir de la cellule A1, le carré de coté N en rouge.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Sub colorier_rouge()
 
N = InputBox("Tapez une valeur entière", "Colorier")
 
For Each c In Range("A1:E5") 'J'ai mis E5 car je ne sais pas comment faire,
' prenons l'exemple que je rentre 5 le carré en question devrai couvrir
 'la zone de A1 à E5 mais comment le noter? 
i = i + 1
c.Interior.ColorIndex = 3
Next
 
End Sub
Je vous remercie d'avance pour votre aide.

Cordialement
souad12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 00h55   #2
Membre éclairé
 
Inscription : juillet 2011
Messages : 141
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 141
Points : 382
Points : 382
Par défaut VBA carrément tout rouge

Bonsoir Souad12,
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Option Explicit ' colorier, à partir de la cellule A1, le carré de coté N en rouge
' ========================== Description de la feuille de dessin
Public Const rowSquare = 1 ' Première rangée du carré à colorier
Public Const colSquare = 1 ' Première colonne du carré à colorier
Public Const colorRed = 3
 
' Prenons l'exemple : je rentre 5. Le carré en question devrait couvrir
' la zone de A1 à E5 mais comment le noter ? Passez en coordonnées L1C1 d'Excel.
Sub Colorier_rouge()
Dim sideOfSquare As Integer, indRow As Integer, indCol As Integer
 
    sideOfSquare = GetSquareSide()
    For indRow = rowSquare To rowSquare - 1 + sideOfSquare
        For indCol = colSquare To colSquare - 1 + sideOfSquare
            Cells(indRow, indCol).Interior.ColorIndex = colorRed
        Next
    Next
End Sub
 
' Avec un Range sans boucle
Sub SquareRed()
Dim sideOfSquare As Integer, rngSquare As Range
 
    sideOfSquare = GetSquareSide()
    Set rngSquare = Range(Cells(rowSquare, colSquare), _
                        Cells(rowSquare - 1 + sideOfSquare, colSquare - 1 + sideOfSquare))
    rngSquare.Interior.ColorIndex = colorRed
End Sub
 
' Saisie du côté du carré
Function GetSquareSide() As Integer
    Do
        On Error Resume Next
        GetSquareSide = CInt(InputBox("Saisir le côté du carré à colorier" + vbCrLf + _
                        "C'est un entier positif supérieur à zéro.", "Red Square"))
        If Err.Number <> 0 Then
            Warning "1000: Vous devez entrer un NOMBRE entier positif pour le côté du carré"
            GetSquareSide = 0
        End If
    Loop Until GetSquareSide > 0
End Function
 
' Common error management
Sub Warning(ByVal strMsg As String)
Const lenErr = 4 ' Number of digits of the error code beginning the message
    If Err.Number <> 0 Then
        strMsg = strMsg + vbCrLf + "Error " + Str(Err.Number) + ": " + Err.Description
    End If
    MsgBox Mid(strMsg, lenErr + 3), vbExclamation, "Square Red warning " + Left(strMsg, lenErr)
End Sub
Utilisez toujours Option Explicit en tête de module qui force la déclaration des variables.
Un commentaire est bienvenu sur ce que fait le module.
Vient ensuite la description de la feuille par des constantes en rangée et colonne.

L'indentation des lignes de code donne la structure du programme

Plutôt que de tout aligner verticalement sur la marge gauche, essayez d'indenter votre code VBA afin de montrer la structure des boucles For grâce à l'indentation avec des tabulations par rapport à la marge gauche. Cela permet de distinguer le corps du programme des variables locales qu'il faut déclarer.

Toujours choisir au moins cinq lettres pour les noms des variables. Remplacer N par sideOfSquare et i par indRow. C'est beaucoup plus lisible ! Et vous pourrez plus facilement les renommer en français si vous le souhaitez.

  • Colorier_rouge() est une solution itérative avec deux For imbriqués par rangée puis colonne.
  • SquareRed() est plus Sioux. Ce Peau-Rouge est nostalgique du Range sans boucle.


Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE (Visual Basic Editeur) d'Excel, copier-coller et valider par ENTER :
Le carré rouge de côté sideOfSquare a été dessiné. Effacez le.

Et la feuille blanche en son coin supérieur devient carrément toute rouge.
MattChess est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/08/2011, 01h50   #3
Invité régulier
 
Femme
Etudiante
Inscription : avril 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Etudiante
Secteur : Santé

Informations forums :
Inscription : avril 2011
Messages : 14
Points : 9
Points : 9
Bonsoir,

Merci beaucoup pour votre réponse très complète et détaillé.
J'avoue que mes programmes ne sont pas toujours bien structurés, je vais essayé d'y remédier grâce à vos conseils.

Avec mes sincères salutations.
souad12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h27.


 
 
 
 
Partenaires

Hébergement Web