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 :

for each pour controle de celulle vide [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    tech
    Inscrit en
    Mai 2025
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : tech

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par défaut for each pour controle de celulle vide
    bonjour,

    j'étais tout heureux d'avoir réussi à écrire ce code :

    Dim ter As Range
    For Each celvide In Range("A1:A12")
    If celvide.Value = "" Then
    MsgBox " merci de ne pas laisser de ligne vide"
    Exit Sub
    Exit For
    End If
    Next ter


    je voulais en faite, que ma macro dise à l'utilisateur de ne pas laisser de case vide dans un tableau A1:A12 ( pour cela ma macro est bonne je pense )
    mais je me suis vite rendu compte que l'utilisateur n'allait pas à chaque fois le remplir en entier ce tableau mais qu'il était possible qu'il ne le remplisse que de 3 ou 4 lignes avant de continuer ma macro.
    de ce fait, j'ai chercher le moyen de "Exit sub" uniquement si il y à une ligne vide entre deux ligne pleine.

    recherche sans succès pour l'instant..

    quelqu'un aurait un conseil pour me guider ?

    un tout grand merci.

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    SAlut

    Tu n'étais pas loin, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim CelVide As Range 
     
    For Each celvide In Range("A1:A12")                 
        If celvide.Value = "" Then                       
           MsgBox " merci de ne pas laisser de ligne vide" 
           Exit For                                             
        End If                                               
    Next
    Tu dois déclarer CelVide, ter ne sert à rien ici.

    Autre chose, il serait préférable de préciser la feuille sur laquelle tu travailles. Le mieux c'est d'utiliser le CodeName des feuilles dans ton code, ça évite bien des risques d'erreur.
    Nom : 2015-01-18_134906.png
Affichages : 117
Taille : 14,2 Ko

    Pour info Exit Sub te fait quitter la procédure complète, le reste du code n'est alors pas exécuté.
    Un conseil, prend tout de suite l'habitude d'indenter ton code pour facilité la lecture et le débogage.

    Et pour ce qui est du forum, tu trouveras un bouton # dans l'éditeur, qui te permet de mettre ton code dans un encadré qui va bien (super important pour les code long et la coloration syntaxique

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre régulier
    Homme Profil pro
    tech
    Inscrit en
    Mai 2025
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : tech

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par défaut
    Raahhhh oui, j'aurais au moins pu voir cela ^^
    merci Qwaz
    Je vais aussi prendre le réflexe de spécifier la feuille comme conseillé.

    le problème est que ce code déclenche la Msgbox si le tableau n'est pas plein. (ce qui est tout à fait possible et autorisé)
    ce que je voudrais c'est que la Msgbox ne se déclenche que lorsqu'il y à une case vide entre deux pleine.

    j'ai oublié de le dire mais vous l'aurez sans doute remarqué, je débute ^^


  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, comme ceci:

    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
    Sub test()
    Dim cel As Range
    Dim videTrouve As Boolean
     
    For Each cel In Range("A1:A12")
        If cel.Value = "" Then
            videTrouve = True
        Else
            If videTrouve Then
                MsgBox "Merci de ne pas laisser de case vide entre deux cases remplies."
                Exit Sub
            End If
        End If
    Next cel
     
    End Sub

  5. #5
    Membre régulier
    Homme Profil pro
    tech
    Inscrit en
    Mai 2025
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : tech

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par défaut
    c'est d'une logique déroutante.
    à force cela rentrera..
    Si je pouvais vous offrir des pralines, je le ferais !

    merci beaucoup qwaz et franc

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Comme disait mon prof de techno en BEP quand il nous demandait de faire un schéma en fonction d'une problématique, "Je veux autant d solution différentes que de gens dans la classe".


    Si on étudie le schéma des différents cas de figure que l'on peut rencontrer, on obtient

    Nom : 2025-05-04_21h06_51.png
Affichages : 98
Taille : 27,1 Ko
    Ici, on se déplace dans la colonne en utilisant Ctrl + Flèche Bas. Ce mode de déplacement arrête le curseur avant un changement de contenu (Lorsqu'on passe de plein à vide ou inversement). En code VBA ça se traduit par
    On peut en déduire que 3 possibilités sont autorisées
    1. 1 seule plage continue avec la 1ère cellule vide
    2. 1 seule plage continue avec la 1ère cellule pleine
    3. 2 plages avec la 1ère cellule pleine


    Les solutions 1 et 2 montrent que si une seule plage existe, on autorise, quelle que soit l'état de la 1ère cellule (pleine ou vide).
    Il ne reste donc que 2 états possible qui sont autorisés
    1. 1 seule plage
    2. 2 plages avec la 1ère cellule pleine


    Niveau code, on peut faire quelques choses comme ça
    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
    Sub TestAuto()
        If Not Autorisation(Feuil1.Range("A1:A12")) Then
            'Message d'alerte
            MsgBox "Merci de ne pas laisser de case vide entre deux cases remplies."
        End If
    End Sub
     
    Function Autorisation(PlageCtrl As Range)
    Dim FirstVide As Boolean
    Dim NbrLoop As Integer
     
    Dim aCell As Range
    Dim NextCell As Range
     
        'On pointe la cellule du début
        Set aCell = PlageCtrl.Cells(1, 1)
     
        'On conserve le fait que A1 soit vide ou non
        FirstVide = aCell.Value = ""
     
        'On parcours une plage continue de valeur (sont vide soit <>vide) autant de fois qu'il faut pour sortir de la zone
        Do
            'On pointe la nouvelle cellule sur laquelle on c'est arrêté
            Set aCell = aCell.End(xlDown)
            'On comptabilise le nombre de boucle
            NbrLoop = NbrLoop + 1
        'Si on dépasse le bas de la plage ou si on fait plus de 2 boucles, on quitte
        Loop Until (aCell.Row >= (PlageCtrl.Row + PlageCtrl.Count)) Or NbrLoop > 2
     
        'On controle le résultat
        Autorisation = (NbrLoop = 1) Or (NbrLoop = 2 And Not FirstVide)
     
    End Function
    Avantage:
    1. Tu peux appeler "Autorisation" dans un code VBA, comme dans la procédure TestAuto
    2. Tu peux utiliser "Autorisation" directement dans une cellule, comme dans la ligne 21. Si le contenu de la plage surveillée change, le résultat se met à jour automatiquement.
      Tu peux ensuite utiliser ce résultat pour faire une coloration des cellules (MFC). Ça évite le MsgBox que je trouve souvent agressif...


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement, j'utilise une mise en forme conditionnelle pour mettre en évidence les cellules non remplies.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut


    21:15 ... et les MFC : Promis, on ne vit pas ensemble avec Philippe

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Membre éclairé
    Homme Profil pro
    curieux
    Inscrit en
    Février 2025
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2025
    Messages : 39
    Par défaut
    Bonjour,

    Juste à titre informatif, dans le cas d'Excel on peut se passer d'écrire une boucle pour trouver les cellules vides d'une plage/Range. Il suffit d'utiliser l'appel Range.SpecialCells method (Excel) | Microsoft Learn avec le type "spécial" recherché (XlCellType) : xlCellTypeBlanks.
    Si l'objectif est simplement de savoir si la plage regardée en contient ou non, on peut utilser cet outil. L'avantage c'est que sur une grande plage (A1:A100000 par exemple) ce sera beaucoup plus rapide.

    Ci-après un mini exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Ex()
      Dim cellulesVides As Range
      On Error Resume Next
      Set cellulesVides = Range("A1:A12").SpecialCells(xlCellTypeBlanks)
      On Error GoTo 0
      If cellulesVides Is Nothing Then
        MsgBox "pas de cellules vides"
      Else
        MsgBox "il y a au moins une cellule vide"
      End If
    End Sub

  10. #10
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Ça n'est pas suffisant. Il faut détecter si une cellule est vide entre deux cellules renseignés, sans pour autant que toutes les autres cellules soient renseignées.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  11. #11
    Membre régulier
    Homme Profil pro
    tech
    Inscrit en
    Mai 2025
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : tech

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par défaut
    jbonjour,

    avec for each, j'ai arrangé et utilisé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim cel As Range
    Dim videTrouve As Boolean                          
     
    For Each cel In Range("J5:J24")                     
        If cel.Value = "" Then                          
            videTrouve = True                           
        Else                                                   
            If videTrouve Then                     
                MsgBox "Problème dans une case :" & vbCrLf & " " & vbCrLf & "Plusieurs possibilité:" & vbCrLf & " " & vbCrLf & "Vous avez laissé une ligne vide. --> Remplir le tableau de haut en bas." & vbCrLf & "Votre N° de batiment n'existe pas." & vbCrLf & "Vous avez généré une #NOM? ou #VALEUR... ect" & vbCrLf & " " & vbCrLf & "Merci de controler c'est différents points avant de relancer l'action."
                Exit Sub
            End If
        End If
    Next cel
    ca marche du tonnerre !

  12. #12
    Membre régulier
    Homme Profil pro
    tech
    Inscrit en
    Mai 2025
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : tech

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par défaut
    bonnuit, ^^

    je renseigne mes lignes afin de pouvoir les réutiliser plus tard si besoin.

    le programme fonctionne comme je le veux mais lorsque j'éssaye de décrire la logique ligne après ligne avec les 'commentaires..
    Je me retrouve face à un truc étrange.

    je voulais au départ que ma msgbox s'active si il trouvait une ligne vide ( c'est ce que le programme fait est c'est super )
    par contre si j'éssaye de l'expliquer.. j'ai envie de dire :
    si il trouve une ligne vide le boolean est true
    sinon
    si il trouve une ligne pleine, le boolean est false alors (then) il ouvre la msgbox.

    ma description ligne après ligne dit le contraire de ce qu'il fait..

    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
    'test chaque cel de mon tableau pour savoir si il y a une ligne vide
     
    Dim cel As Range
    Dim videTrouve As Boolean                           ' utilise videtrouve en true ou false (boolean par défaut ce type est toujours en false.)
     
    For Each cel In Range("J5:J24")                     ' refresh la variable cel à chaque boucle du tableau J5:J24 en descendant
        If cel.Value = "" Then                          ' si la valeur de cel est vide alors
            videTrouve = True                           ' le test boolean passe en true puisqu'il vient de trouver une variable cel vide
        Else                                            ' si non
            If videTrouve Then                          ' et bien c'est qu'il a trouvé quelque chose dans la variable cel et le test reste négatif, il déclenche le msgbox
                MsgBox "Problème dans une case :" & vbCrLf & " " & vbCrLf & "Plusieurs possibilité:" & vbCrLf & " " & vbCrLf & "Vous avez laissé une ligne vide. --> Remplir le tableau de haut en bas." & vbCrLf & "Votre N° de batiment n'existe pas." & vbCrLf & "Vous avez généré une #NOM? ou #VALEUR... ect" & vbCrLf & " " & vbCrLf & "Merci de controler c'est différents points avant de relancer l'action."
                Exit Sub
            End If
        End If
    Next cel                                            'permet refresh la variable cel en testant la case en dessous
    Bon d'un autre coté, il est tard et je suis peut etre un peu trop fatigué ..

  13. #13
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Je ne comprends pas trop, le code fait ce qu'il faut mais tu veux une explication du code? C'est ça?

    Si c'est le cas tu dois raisonner en terme de boucle.

    Boucle 1, on regarde si la cellule est pleine ou vide. Si elle est vide on lève un drapeau (vide trouvé). Vide ou pleine, on passe à la suite.

    Boucle suivante, on regarde de nouveau si la cellule est pleine ou vide. Si elle est vide on lève le drapeau (qui est déjà levé donc ça ne change rien...
    Par contre si la cellule est plein, on regarde l'état du drapeau. Si celui-ci est levé, c'est qu'au dessus, on a déjà trouvé une ou plusieurs cellules vides et donc on fait une alerte.


    C'est une façon plutôt "agressive" de géré l'erreur, d’où la remarque de Philippe et moi-même concernant l'utilisation d'une MFC (Mise en forme conditionnelle). Le but est de passer en rouge tout ou partie du tableau (ça peut être juste la case vide qui se trouve entre des cases pleines) de saisie pour alerter l'utilisateur que des cases ont été laissées vides en chemin.
    Tu peux également mettre un message dans une cellule qui apparait dans les mêmes conditions que la coloration, pour donner une explication du pourquoi un passage en rouge.
    Ce principe est bien plus agréable à l'utilisation, surtout si l'utilisateur tâtonne pour découvrir le fichier. Être bloqué tant qu'on a pas validé un truc et ça plusieurs fois de suite si on ne saisie pas le fonctionnement de suite, c'est super frustrant (c'est mon avis).

    Il y a aussi le où mettre le code, c'est peut-être ça qui te pose problème.
    Ici il faut le mettre dans la procédure événementielle "Change" de ta feuille (ou de ton classeur si tu veux gérer plusieurs feuilles identiques).
    Dans VBE, tu double-cliques sur ta feuille pour afficher le code qu'elle contient. Puis dans la 1ère liste déroulante de l'éditeur, tu choisis Worksheet, la seconde liste va se charger avec toutes les procédures événementielles de ta feuille, il te suffit de sélectionner "Change" dans la liste. Tout le code inclus dans cette procédure sera exécuté par Excel à chaque fois que le contenu d'une cellule change (il faut valider la saisie, change n'est pas appelé en cours de frappe).

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je me permets d’ajouter deux tutoriels qui complètent utilement la réponse de Quaz.


    Être bloqué tant qu'on a pas validé un truc et ça plusieurs fois de suite si on ne saisie pas le fonctionnement de suite, c'est super frustrant (c'est mon avis).
    Je partage entièrement. Subir l'affichage de plusieurs MsgBox à la suite est tout simplement très énervant
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  15. #15
    Membre régulier
    Homme Profil pro
    tech
    Inscrit en
    Mai 2025
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : tech

    Informations forums :
    Inscription : Mai 2025
    Messages : 7
    Par défaut
    merci philippe et qwaz,

    Je suis tout a fait d'accord avec vous.
    je vais essayer de trouver le moyen de colorer la ligne (unique) qui fait sortir de la boucle par activation de la msgbox.

    je voulais en premier que le code ne plante pas.
    j'ai pas mal d'autres actions déjà "codée".

    en tout cas, merci à vous pour vos conseils et aide.


    REDIT :

    trouvé, aaahhh
    ici je colore en jaune la cel qui pose problème et sinon tout repasse en blanc si pas de problème

    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
    Dim cel As Range
    Dim videTrouve As Boolean                    
     
    For Each cel In Range("F5:F24")                     
        If cel.Value = "" Then                        
            videTrouve = True                           
        cel.Interior.ColorIndex = 6                     'colore la celulle qui pose probleme
        Else                                            '
            If videTrouve Then                          
                MsgBox "Problème dans une case :" & vbCrLf & " " & vbCrLf & "Plusieurs possibilité:" & vbCrLf & " " & vbCrLf & "Vous avez laissé une ligne vide. --> Remplir le tableau de haut en bas." & vbCrLf & "Votre N° de batiment n'existe pas." & vbCrLf & "Vous avez généré une #NOM? ou #VALEUR... ect" & vbCrLf & " " & vbCrLf & "Merci de controler c'est différents points avant de relancer l'action."
                Exit Sub
            End If
        End If
    Next cel                                           
    Range("F5:F24").Interior.ColorIndex = 2  ' si pas de probleme, repasse le tableau en blanc

  16. #16
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 211
    Par défaut
    Juste pour info...
    ...Interior.ColorIndex = 2 MET la couleur blanche alors que "pas de couleur" se traduit par ...Interior.ColorIndex = -4142 ou mieux ...Interior.ColorIndex = xlColorIndexNone

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Juste pour info...
    ...Interior.ColorIndex = 2 MET la couleur blanche alors que "pas de couleur" se traduit par ...Interior.ColorIndex = -4142 ou mieux ...Interior.ColorIndex = xlColorIndexNone
    Absolument.
    De plus les index peuvent varier d'une version à l'autre. J'ai toujours banni cette propriété et préfère la propriété Color qui permet de définir sa couleur sans risque.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  18. #18
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Salut

    Pourquoi passer par VBA?
    Avec une simple MFC ça fait le boulot (Ruban Accueil, Mise En Forme Conditionnelle, Nouvelle règle, Utiliser une formule pour déterminer pour quelles cellules le format sera appliqué).

    La formule de la MFC placée en A1:H12 est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(A1="";NB.SI(A1:A$12;"<>")>0)
    Si la cellule est vide et que des cellules présentent en dessous d'elle ne sont pas vide, elle passe en rose. Bien plus simple que du VBA (y compris de ma proposition de code function)

    Sur les colonnes J à Q c'est le résultat de la MFC sur les colonnes A à H.

    ++
    Qwaz
    Fichiers attachés Fichiers attachés

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  19. #19
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi passer par VBA?
    Avec une simple MFC ça fait le boulot (Ruban Accueil, Mise En Forme Conditionnelle, Nouvelle règle, Utiliser une formule pour déterminer pour quelles cellules le format sera appliqué).
    On est bien d'accord.
    J'ai simplement répondu par rapport à la propriété ColorIndex qui pour moi n'est pas fiable mais évidemment que je privilégie les fonctionnalités intégrées d'excel, telle que la Mise en forme conditionnelle, avant de passer par du VBA
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  20. #20
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Je n'ai aucun doute la dessus, nos messages se sont simplement croisés, cette réponse allait en direction de Seb112

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Boucle for each pour récupérer des éléments de deux tag différents
    Par patricktoulon dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 25/02/2018, 14h09
  2. Réponses: 2
    Dernier message: 27/01/2009, 13h47
  3. xsl:for-each avec un parametre pour select
    Par arnog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/08/2008, 13h09
  4. Quel est l'index qui sert pour les For Each ?
    Par Nixar dans le forum VB.NET
    Réponses: 5
    Dernier message: 04/06/2007, 08h23
  5. Aide pour For each..... Next
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 24/05/2006, 14h34

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