IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Colorier une zone imposé par l'utilisateur [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut VBA carrément tout rouge
    Bonsoir Souad12,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre averti
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/04/2006, 12h03
  2. [MySQL] Envoi identifiant d'une zone membre par mail
    Par vinche999 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/01/2006, 23h12
  3. Réponses: 10
    Dernier message: 24/12/2005, 15h35
  4. Réponses: 3
    Dernier message: 21/12/2005, 11h55
  5. Réponses: 2
    Dernier message: 03/10/2005, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo