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 :

Concept d'une variable a valeur multiple


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut Concept d'une variable a valeur multiple
    Bonjour a vous,


    J'ai une subroutine permettant de valider les données d'un fichier Excel, si les champs requis sont conformes a un logiciel auquel j'importe les données. Parfois les données que je traite on des erreurs (mauvaises information demandé complétés, mauvaises interprétation de l'utilisateur) et je corrige celles-ci en les identifiant d'une couleurs différente le "font" et l'"interior" afin de les rendre plus visibles. (j'utilise police rouge, remplissage jaune)

    Si j'exécute ma sub de validation, je demande d'identifié les erreurs, champs obligatoires manquant, trop long, mauvais type de donné dans une couleur différente (font =3 et interior = 34). Si tout est correct, ou si l'erreur est corrigé, la cellule deviens en blanc écriture noir (font = 1 et interior = 2)


    Au lieu de remettre blanc et écriture noir, je voudrais que la cellule sois colorer au "font" et "interior" de la couleur de départ, ainsi les erreurs corrigers ne seraient plus écrasé par le font noir et écriture blanc.



    Donc a la fin du processus la cellule ayant une écriture rouge reste rouge et celle ayant une écriture noir reste noir.


    Voici une partie du code illustrant ce que je fais présentement

    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
    'si la longueur de la provinciale courte est plus grand que 100, le texte est en rouge sur fond bleu
     
                If Len(Cells(x + 1, [prov_court_travail].Column)) > 100 Then
                    compteur = compteur + 1
                    With Cells(x + 1, [prov_court_travail].Column)
                    .Font.ColorIndex = 3
                    .Interior.ColorIndex = 34
                    End With
                Else
                    With Cells(x + 1, [prov_court_travail].Column)
                    .Font.ColorIndex = 1
                    .Interior.ColorIndex = 2
                    End With
                End If
     
     
    'si la provinciale courte est vide on inscrit ??? et on met en rouge sur fond bleu
     
                If IsEmpty(Cells(x + 1, [prov_court_travail].Column)) Then
                    compteur = compteur + 1
                    With Cells(x + 1, [prov_court_travail].Column)
                    .value = "???"
                    .Font.ColorIndex = 3
                    .Interior.ColorIndex = 34
                    End With
                Else
                    With Cells(x + 1, [prov_court_travail].Column)
                    .Font.ColorIndex = 1
                    .Interior.ColorIndex = 2
                    End With
                End If
     
     
    'si on a toujours une descripton provinciale courte = ??? ou plus grande que 100 caractères on maintien la couleur rouge sur fond bleu
     
                If Cells(x + 1, [prov_court_travail].Column) = "???" Or Len(Cells(x + 1, 4)) > 100 Then
                    compteur = compteur + 1
                    With Cells(x + 1, [prov_court_travail].Column)
                    .Font.ColorIndex = 3
                    .Interior.ColorIndex = 34
                    End With
                End If

    encore mille fois pour votre aide / commentaires !!!

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Est-ce que vous savez si c'Est quelque chose de faisable ou c'est trop complexe ???


    merci

  3. #3
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    il te faut un repaire de couleur -> indication de la couleur d'origine

    une indication peut être :
    si toute la colonne est verte...
    si une couleur en fonction du format...

    une mesure extrême :
    à la façon d'un log ,
    tu notes les cellules à modifier et la couleur : [A2] et [2_34]
    pour remettre la couleur tu recherche A2 et tu as tes couleurs 2 et 34
    (tu efface la ligne)

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu pourrais mettre des n° d'erreurs en commentaire et les supprimer au fur et à mesure de leur correction.
    En sortie à toi de mettre la couleur en fonction de ce qu'il reste comme erreurs.
    eric

  5. #5
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    oui, c'est çà... tu mets les codes couleur en commentaire !!!
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  6. #6
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Un gros merci pour la piste de solution !!!


    amicalement

    JP

  7. #7
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    J'ai fais quelque test de mon coté en copiant le format dans une cellule dédié pour chacune des colonnes en question. Par exemple la colonne chocolat a un miroir appeler couleur_chocolat.


    Je me bute toujours au meme probleme i.e. la copie des nouvelles couleurs lors de la ré-exécution de la validation. Si j'exécute la sub une fois tout fonctionne a merveille. La seconde fois, étant donné quelle copie le format, bref elle écrase le contenu antérieur.

    Je vais essayé tout bêtement en ajoutant un if si le tout pourra réglé le probleme






    encore merci

  8. #8
    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 175
    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 175
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si j'ai bien compris ta question, tu veux tester une plage de cellule et détecter des erreurs ou anomalies et placer une couleur à ces cellules.
    Si c'est le cas, voici une proposition utilisant des constantes énumérées (de 1 à X) et un Select Case True
    Tu prévois une plage d'une colonne où en ligne 1 de cette plage, tu place la couleur intérieur que tu souhaites rétablir (par exemple "Aucun remplissage", en ligne 2 et suivantes tu places la couleur intérieure souhaitée pour cette erreur.
    Pour l'exemple, la plage à contrôler est A1:A500 de la feuille nommée Feuil1 et la plage contenant les couleurs de F1 à F4 de la même feuille (A toi de choisir éventuellement une autre feuille du même classeur ou d'un autre
    Code Exemple avec trois types de contrôle (Cellule vide, non numérique et trop long)
    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
    Option Explicit
    Enum ErrorList
     EstVide = 1
     TropLong = 2
     PasNumeric = 3
    End Enum
    Sub test()
     Dim c As Range, rng As Range, rngColor As Range, ColorNumber As Byte
     With ThisWorkbook.Worksheets("Feuil1")
      Set rng = .Range("A2:A500")
      Set rngColor = .Range("F1:F4")
     End With
     For Each c In rng
      Select Case True
       Case Len(c) = 0: ColorNumber = ErrorList.EstVide
       Case Len(c) > 10: ColorNumber = ErrorList.TropLong
       Case Not IsNumeric(c): ColorNumber = ErrorList.PasNumeric
       Case Else: ColorNumber = 0
      End Select
      '
      c.Interior.Color = rngColor.Cells(ColorNumber + 1, 1).Interior.Color
      ' 
     Next c
    End Sub
    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

  9. #9
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Bonjour Philippe,

    Effectivement je tente a identifier des anomalies selon des critères précis en mettant les cellules ayant un ou des erreurs dans une font.colorindex = 3 et interior.colorindex = 34. Une fois le ou les correctifs apportés, je voudrais lorsque je ré-exécute la sub, les cellules ayant eu des erreurs (devenu font 3 et interior 34) reprennent leur font et interior de départ avant la première exécution de la sub.



    Ce qui est le plus "tricky", c'est que le numero du "font" ou de "interior" peut différé d'une cellule ayant un erreur.


    Ce que l'on m'a suggéré et que je trouve hyper logique est de copier le format des cellules dans une autre cellules et de récupéré l'info une fois terminer.


    Ce qui me cause des embuches c'Est lorsque j'exécute la validation une seconde fois apres bien sur corriger l'erreur, le font et interior copier est remplacer par le 3 et 34. Donc je perds la valeur du font et interior de depart.


    en espérant ayant été un peu plus précis dans mes explications !!!



    en vous remerciant

  10. #10
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Avec les if ca semble bien fonctionné

    Si je prends mon exemple de départ



    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    'si la longueur de la provinciale courte est plus grand que 100, le texte est en rouge sur fond bleu
     
                If Len(Cells(x + 1, [prov_court_travail].Column)) > 100 Then
                    compteur = compteur + 1
     
                    If Cells(x + 1, [prov_court_travail].Column).Font.ColorIndex <> 3 And _
                       Cells(x + 1, [prov_court_travail].Column).Interior.ColorIndex <> 34 Then
     
                       Cells(x + 1, [prov_court_travail].Column).Copy
                       Cells(x + 1, [couleur_prov_court_travail].Column).PasteSpecial (xlPasteFormats)
     
     
                        With Cells(x + 1, [prov_court_travail].Column)
                            .Font.ColorIndex = 3
                            .Interior.ColorIndex = 34
                        End With
                    End If
                Else
     
                  If Cells(x + 1, [prov_court_travail].Column).Font.ColorIndex <> 3 And _
                     Cells(x + 1, [prov_court_travail].Column).Interior.ColorIndex <> 34 Then
     
                     Cells(x + 1, [prov_court_travail].Column).Copy
                     Cells(x + 1, [couleur_prov_court_travail].Column).PasteSpecial (xlPasteFormats)
                  End If
     
                End If
     
    'si la provinciale courte est vide on inscrit ??? et on met en rouge sur fond bleu
     
                If IsEmpty(Cells(x + 1, [prov_court_travail].Column)) Then
                    compteur = compteur + 1
     
                    With Cells(x + 1, [prov_court_travail].Column)
                        .value = "???"
                        .Font.ColorIndex = 3
                        .Interior.ColorIndex = 34
                    End With
                Else
     
                    If Cells(x + 1, [prov_court_travail].Column).Font.ColorIndex <> 3 And _
                     Cells(x + 1, [prov_court_travail].Column).Interior.ColorIndex <> 34 Then
     
                     Cells(x + 1, [prov_court_travail].Column).Copy
                     Cells(x + 1, [couleur_prov_court_travail].Column).PasteSpecial (xlPasteFormats)
     
                    End If
     
                End If
     
     
     
    'si on a toujours une descripton provinciale courte = ??? ou plus grande que 100 caractères on maintien la couleur rouge sur fond bleu
     
                If Cells(x + 1, [prov_court_travail].Column) = "???" Or Len(Cells(x + 1, [prov_court_travail].Column)) > 100 Then
                    compteur = compteur + 1
     
                    With Cells(x + 1, [prov_court_travail].Column)
                    .Font.ColorIndex = 3
                    .Interior.ColorIndex = 34
                    End With
     
                 Else
     
                    Cells(x + 1, [couleur_prov_court_travail].Column).Copy
                    Cells(x + 1, [prov_court_travail].Column).PasteSpecial (xlPasteFormats)
     
                End If

  11. #11
    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 175
    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 175
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Effectivement je tente a identifier des anomalies selon des critères précis en mettant les cellules ayant un ou des erreurs dans une font.colorindex = 3 et interior.colorindex = 34. Une fois le ou les correctifs apportés, je voudrais lorsque je ré-exécute la sub, les cellules ayant eu des erreurs (devenu font 3 et interior 34) reprennent leur font et interior de départ avant la première exécution de la sub.
    Et bien mis à part le fait que je n'ai prévu que la mise en couleur de la cellule et pas la fonte mais il suffit d'ajouter une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.Font.Color = rngColor.Cells(ColorNumber + 1, 1).Font.Color
    Après correction de l'anomalie, il suffit de relancer la procédure pour qu'il place la couleur intérieure et la police dans le format souhaité (Cellule 1 de la plage F1:F4)

    Dans l'exemple proposé, il y a la possibilité de définir une couleur par type d'anomalie.
    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

Discussions similaires

  1. [Conception] Faire une somme de valeurs définies par une boucle
    Par fixbraun dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/09/2006, 23h46
  2. donner a une variable la valeur d'1 cellule d'1 autre fichier
    Par yahi.jye dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/09/2006, 00h29
  3. [Conception] INSERT une variable de valeur 1
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 11/09/2006, 13h10
  4. [C#] Lier une variable à la valeur d'un textbox
    Par etiennegaloup dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/06/2006, 16h48
  5. [Custom Tags 1.2] Passer une variable comme valeur d'attribut d'un tag jsp
    Par Pi2 dans le forum Taglibs
    Réponses: 7
    Dernier message: 16/09/2005, 14h44

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