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 :

Colorisation d'une cellule vide avec MsgBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut
    Bonjour à tous,

    J'ai cette petite macro (on m'a aidé), elle marche super suef que l'instruction :

    ActiveCell.Interior.ColorIndex = 5 ' <-- La cellule non remplie est colorisée en bleu

    fait tout foiré ! J'ai fais de nombreuse recherche mais je n'ai pas trouvé de soluces qui fonctionnent. J'en ai trouvé des tonnes, soit la macro plante, soit la macro ne réagit. pas !

    Est-ce qu'un as aurait une petite idée.

    Ma macro

    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
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' <-- Teste si les cellules à remplir obligatoirement, le sont !
    Dim FL1 As Worksheet, TabloChamp As Variant, TabloMsg As Variant, i As Integer
     
    Set FL1 = Worksheets("Remplacement")
        TabloChamp = Array("B2", "D3", "C5", "G6", "B9", "B19", "C20", "G20", "D21", "I21", "I21")
        TabloMsg = Array("CASS ou Unité                               ", "Nom et prénom de la personne à remplacer  ", _
                         "Taux d'activité du collaborateur             ", "N° du bureau                              ", "Justification de la demande               ", _
                         "Remplaçant(e) désiré(e)                   ", "Début de mission                          ", "Fin de mission                            ", _
                         "Votre nom et prénom                       ", "Date de la demande                        ") ' <-- Texte du champ oublié
     
        For i = 0 To UBound(TabloChamp) - 1 ' <-- test sur les 10 éléments du tableau, remplis ou pas remplis
     
            If FL1.Range(TabloChamp(i)) = "" Then
     
                MsgBox "Nous sommes le " & Date & " " + Chr$(13) + Chr$(13) & "Vous êtes : " & Environ("username") + Chr$(13) + Chr$(13) & "Vous avez oublié de saisir le champ :     " + Chr$(13) + Chr$(13) & TabloMsg(i) + Chr$(13) + Chr$(13) & "Veuillez le saisir svp ! !", vbOKOnly + vbExclamation, "                    -  ERREUR DE SAISIE  -          "       ' <-- Mise en forme du message erreur
                ActiveCell.Interior.ColorIndex = 5   ' <-- La cellule non remplie est colorisée en bleu
                Cancel = True
     
        Exit For
     
            End If
     
        Next
     
    End Sub

  2. #2
    Membre habitué
    Homme Profil pro
    R&D laboratoire
    Inscrit en
    Janvier 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D laboratoire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2008
    Messages : 83
    Points : 157
    Points
    157
    Par défaut
    Bonjour,
    le code fonctionne quand on le copie dans une feuille vierge.
    l'application de la couleur fait référence à l'activecell; j'ai lu (peut-être trop) rapidement le code et je n'ai pas vu d'instruction pour activer la cellule à colorier.

  3. #3
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut


    Une petite précision à l'attention de ceux qui désire me donner un coup de main.

    Cette macro teste si une cellule est remplie ou pas. Si la cellule de ma feuille n'est pas remplie, un message erreur sous forme de "Box". La sauvegarde de la feuille est impossible tant qu'une des cellules qui doit être remplie.

    Cela fonctionne sans aucun problème.

    Je désire juste ajouter la colorisation de la cellule non remplie au message erreur.


  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Interior.ColorIndex = 5
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL1.Range(TabloChamp(i)).Interior.ColorIndex = 5

  5. #5
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut


    Je te remercie de ta réponse mais . . .

    l'instruction plante et je reçoit le message suivant, sous forme de MsgBox :

    Erreur d'exécution '1404':

    Impossible d'établir la propriété ColorIndex de la classe Interior
    J'ai déjà essayé plusieurs instructions du type que tu m'as donné. Récupérées à gauche et à droite (forums, sites) et à chaque coup c'est la même erreur qui se produit. Il doit manqué une instruction quelquepart.


  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    non l'erreur vient d'ailleurs alors.

    Insère des MsgBox à gauche à droite pour vérifier ce que retourne tes variables, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If FL1.Range(TabloChamp(i)) = "" Then
    Msgbox TabloChamp(i) '<-- résultat ?

  7. #7
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut


    J'ai essayé ton conseil mais aucune erreur apparente. A chaque fois, il me renvoie la valeur de la cellule. A chaque fois le message indique le N° de la cellule et sa valeur qui est nulle. Normal puisqu'elle est vide.

    J'ai encore essayé d'autres combines mais je me tape la tête contre les murs

  8. #8
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    J'ai essayé ton code et avec cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL1.Range(TabloChamp(i)).Interior.ColorIndex = 5
    Cela fonctionne nickel

  9. #9
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut


    Je ne doute pas que cela fonctionne chez toi, mais avec la version instalée au boulot, Excel 2000, les problèmes doivent venir de cette version "très récente" pour eux. Bonjour les économies . . .

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    j'ai la même version

    Fais ce simple test sur une feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    Range("A1:C10").Interior.ColorIndex = 5
    End Sub

  11. #11
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut


    Ca fonctionne si je lance manuellement la macro mais pas automatiquement dans ma feuille.

    Je te la joint comme cela tu verras !

    Il y a plein de commentaires dans les macros afin de comprendre mes démarches et ma "logique"

    PS j'ai enlevé la protection de la feuille

    PS 2 si tu as suivi la discussion concernant la sauvegarde du fichier tu verras également le problème.


  12. #12
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    La macro de sauvegarde fonctionne correctement chez moi et met bien la cellule vide en couleur...!

    EDIT : arf...je crois que je viens de comprendre en relisant ton message...ne me dis pas que tu fais tous tes essais avec ta feuille et toutes les cellules protégées...?

  13. #13
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut


    Je te rassure fring, seule la feuille est protégée afin qu'elle fonctionne comme un formulaire (la feuille jointe hier ne l'est pas).

    Les champs à remplir passent de l'un à l'autre avec la touche TAB. Les cellules testées ne sont pas verrouillées (normal, on ne pourrait pas les remplir).

    Si tu testes la feuille (protégée), tu verras que la macro qui renvoie les messages d'erreur fonctionne correctement (seuf l'option couleur), que la macro d'ouverture de la feuille fonctionne également.

    Comme annoncé, la macro d'enregistrement ne fonctionne pas. Certainement dû à cause de réduction de droit sur le réseau, mais je n'en suis pas sûr.


  14. #14
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Je viens de faire différentes simulations et le bug provient du fait que la feuille est protégée, même si la cellule en question ne l'est pas, je n'avais jamais constaté ce détail auparavant .

    La solution consiste donc dans ton code à retirer cette protection en début de procédure ActiveSheet.Unprotect et à la remettre en fin de procédure ActiveSheetProtect.

  15. #15
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut
    Merci pour ton info

    Effectivement cela déprotége la feuille mais tjs pas de colorisation de la cellule

    si ça marche chez toi avec ma feuille excel et que chez moi cela ne

    fonctionne pas, je n'y comprends rien.

    le seul problème, c'est que le remplissage du formulaire n'est plus optimisé et

    les cellules protégées ne le sont plus et peuvent être modifiée ou effacée.

    Merci quand-même

  16. #16
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par olivepao Voir le message
    les cellules protégées ne le sont plus et peuvent être modifiée ou effacée.
    Elles ne sont plus protégées une fraction de seconde, le temps de la procédure et la protection se remet en place en fin de procédure, du moins si tu as correctement inséré les lignes dans ton code.

  17. #17
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour,

    juste pour faire un test,
    tu pourrais essayer ce code?

    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
    Dim FL1 As Worksheet, TabloChamp As Variant, TabloMsg As Variant, i As Integer
    Dim rng As Range
     
    Set FL1 = ActiveSheet
        TabloChamp = "B2,D3,C5,G6,B9,B19,C20,G20,D21,I21,I21"
        TabloMsg = Array("CASS ou Unité                               ", "Nom et prénom de la personne à remplacer  ", _
                         "Taux d'activité du collaborateur             ", "N° du bureau                              ", "Justification de la demande               ", _
                         "Remplaçant(e) désiré(e)                   ", "Début de mission                          ", "Fin de mission                            ", _
                         "Votre nom et prénom                       ", "Date de la demande                        ") ' <-- Texte du champ oublié
    Set rng = Range(TabloChamp)
    For Each c In rng
        If c = "" Then
            'Mise en forme du message erreur
            MsgBox "Nous sommes le " & Date & " " + _
                    Chr$(13) + Chr$(13) & "Vous êtes : " & Environ("username") + _
                    Chr$(13) + Chr$(13) & "Vous avez oublié de saisir le champ :     " + _
                    Chr$(13) + Chr$(13) & TabloMsg(i) + Chr$(13) + Chr$(13) & _
                    "Veuillez le saisir svp ! !", vbOKOnly + vbExclamation, _
                    "                    -  ERREUR DE SAISIE  -          "
            c.Interior.ColorIndex = 5
        End If
    Next
    merci

  18. #18
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut


    Je te remercie de ta contribution

    Si une cellule n'est pas remplie, je reçois ma MsgBox d'erreur qui fonctionne.

    Mais après avoir cliquer sur le bouton OK, la suite du code plante et je reçois

    Erreur d'exécution '1404':

    Impossible d'établir la propriété ColorIndex de la classe Interior


    dans une MsgBox

    Dommage car ta soluce me plaisait beaucoup !

  19. #19
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    tu peux essayer de remplacer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.Interior.ColorIndex = 5
    par celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print c.interior.colorindex
    et pis tu nous dis ce qu'il y a dans la fenetre d'execution


    tu poourrais aussi essayer ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            c.Interior.Color = 16711680

  20. #20
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    A force de taper sur le clou, il finira bien par s'enfoncer...!

    Tu as ce message parce que ta feuille est protégée, otes la protection en début de procédure et remet là en fin de procédure

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Sélection d'une cellule vide dans un fichier "ouvert" avec GetOpenFilename
    Par mauriceguillier dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/12/2010, 14h40
  2. Réponses: 3
    Dernier message: 06/12/2006, 10h01
  3. Mettre un "0" à là place d'une cellule vide.
    Par P'tit Lio dans le forum Access
    Réponses: 22
    Dernier message: 24/07/2006, 14h19
  4. Comment lire le contenu en arabe d'une cellule excel avec
    Par deneche dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/03/2006, 10h01
  5. [JTable] Créer une JTable vide avec des noms de colonnes.
    Par Cyborg289 dans le forum Composants
    Réponses: 2
    Dernier message: 27/09/2005, 15h54

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