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 :

Test du contenu saisi sur un liste de données, couleur selon resultat [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Test du contenu saisi sur un liste de données, couleur selon resultat
    Bonjour à tous,

    Je suis débutant dans ce forum et dans le domaine.
    Je souhaiterai créer une macro avec l'objectif suivant:

    - Sur une 6 cellules consécutives et à chaque changement de cellule, je teste l’existence du contenu saisi sur une liste de données en feuille2 (fraise,banane,poire,pomme,prune,abricot,cerise,raisin,melon,framboise)

    - Si le contenu existe: la cellule se colore en vert

    - Si le contenu n'existe pas: la cellule se colore en rouge

    Deux options: soit je créé un bouton "check", soit ça se fait à chaque changement de cellule (select_change).

    Merci pour votre aide!

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    3ème option : N'est-ce pas plus simple de passer par l'outil de mise en forme conditionnelle ?
    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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    Si cela suffit, je suis preneur.Je n'arrive pas à trouver la bonne méthode, auriez-vous des indications?

    Merci!

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Imaginons que les références de produit se trouve en colonne A à partir de la ligne 2 et la liste des produits en feuille nommée Feuil2 sur la plage A2:A10
    Sélectionner la plage où doit avoir lieu la mise en forme conditionnelle (par exemple $A$2:$A$50)
    Sélectionner la commande Gérer les règles... de l'outil Mise en forme conditionnelle (onglet [Accueil], groupe Style)
    Dans la boîte de dialogue Gestionnaire des règles de la mise en forme conditionnelle, sélectionner Nouvelle règle... et sélectionner comme type de règle Utiliser une formule pour déterminer pour quelles cellules le format sera appliqué.
    Ensuite insérer la formule (La formule doit toujours renvoyer VRAI ou FAUX)
    Pour appliquer un format en cas d'inexistence de la valeur de la cellule se trouvant en colonne A, la formule est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(NBCAR($A2);ESTNA(EQUIV($A2;Feuil2!$A$2:$A$10;0)))
    Pour appliquer un format si la valeur se retrouve dans la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EQUIV($A2;Feuil2!$A$2:$A$6;0)
    Idéalement, il faudrait nommer la plage où se trouve la liste des produits (A2:A10). L'exemple montré plus haut ne fonctionnant que sur las versions 2010 et supérieures.
    Pour les versions antérieures, l'outil Mise en forme conditionnelle ne pouvait faire référence à une plage se trouvant sur une autre feuille.
    Il y aurait donc lieu de modifier alors la référence à Feuil2!$A$2:$A$10 par le nom donné à cette plage.
    Soit pour le premier exemple en imaginant que le nom donné serait ListProduit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(NBCAR($A2);ESTNA(EQUIV($A2;ListProduit;0)))
    Pour rappel : Pour nommer une cellule ou une plage de cellule Onglet [Formules], groupe Nom définis, commande Gestionnaire de noms
    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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci Beaucoup pour les explications claires et précises!

    J'ai bien suivi votre méthode. Deux problèmes se posent:

    - La condition "si non existe" annule la condition "si existe" alors que si je mets l'une ou l'autre seulement, ça fonctionne

    - Une fois la plage renommée et intégrée dans la formule, ça ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(NBCAR(F$11);ESTNA(EQUIV(F$11;ListeData;0)))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EQUIV(F$11;ListeData;0)
    Pour infos,
    J'ai dans ma macro d'ouverture une commande qui renomme la plage dans la feuille2 (Database) de la première à la dernière cellule non vide en "ListeData"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Database").Names.Add Name:="ListeData", RefersTo:=Range("A1:A" & [A65536].End(xlUp).Row
    Encore Merci pour votre aide!

    J'utilise la version 2010 d'excel et mon fichier est au format ".xlsm".

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai dans ma macro d'ouverture une commande qui renomme la plage dans la feuille2 (Database) de la première à la dernière cellule non vide en "ListeData"
    N'est-ce pas plus simple de nommer la plage depuis Excel et pour la rendre dynamique, transformer cette plage en tableau ?
    Je ne suis pas devant mon PC et ne peux donc pas faire de tests mais manifestement, la plage nommée est de portabilité feuille. Il faut alors modifier la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(NBCAR(F$11);ESTNA(EQUIV(F$11;Feuil2!ListeData;0)))
    (Non testé)
    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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci du temps consacré!

    N'est-ce pas plus simple de nommer la plage depuis Excel et pour la rendre dynamique, transformer cette plage en tableau ?
    Pour des raisons de mises à jour récurentes de la base de données, à chaque ouverture du fichier, ma macro va effacer le contenu de la feuille2(Database) puis importer des données reparties sur plusieurs feuilles d'un autre fichier.
    Je les importe et les colle bout à bout dans la feuille2(Database).

    La plage est ensuite renommée (ListeData), et je m'en sers comme référence.
    Tout est donc automatisé à l'ouverture.

    Éventuellement, je pourrais transformer la plage en tableau? Je ne connais pas la commande mais en paufinant..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(NBCAR(F$11);ESTNA(EQUIV(F$11;Feuil2!ListeData;0)))
    ça ne fonctionne pas, Excel me dit:

    "Ce type de référence ne peut être utilisé dans une formule Mise en forme Conditionnelle"
    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
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant d'aller plus loin dans les investigations, je vois une différence dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(NBCAR(F$11);ESTNA(EQUIV(F$11;ListeData;0)))
    par rapport à ma proposition qui faisait référence à la cellule $A2
    Si les références à contrôler sont en colonne F et commence à la ligne 11 et suivante, après avoir sélectionné les cellules de F11:F99 par exemple, la référence doit être $F11 et pas F$11
    On bloque la colonne F et pas la ligne 11 mais j'ajouterais que si la colonne F est la seule à être sélectionnée dans la MFC, la formule peut faire référence à F11 (référence relative) et à condition bien entendu de n'avoir sélectionné que des cellules de la colonne F et en commençant à la ligne 11.
    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
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Les cellules à contrôler sont sur une ligne d'où le F$11 et la liste de données en feuille2 est sur une colonne

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Excepté si tu n'as pas affiché tout ton code, la syntaxe que tu as affichée pour créer un nom n'est pas exacte.
    Exemples
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestDefinedName()
     ' Exemple 1 - Nommer une plage de cellules portabilité classeur
     With ThisWorkbook.Worksheets("db")
      ThisWorkbook.Names.Add Name:="ProductList", RefersTo:=.Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
     End With
     ' Exemple 2 - Nommer une plage de cellule portbilité feuille [db]
     With ThisWorkbook.Sheets("db")
     .Names.Add Name:="ProductList_sh", RefersTo:=.Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
     End With
    End Sub
    La syntaxe pour une des formules proposée dans ma réponse plus haut.
    Avec la référence à une plage nommée de portabilité classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NON(ESTNA(EQUIV($A2;ProductList;0)))
    Avec la référence à une plage nommée de portabilité feuille ([db])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NON(ESTNA(EQUIV($A2;db!ProductList_sh;0)))
    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

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Merci beaucoup ça fonctionne!

    Un grand merci à vous

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

Discussions similaires

  1. [CKEditor] insérer le contenu saisi dans la base de données
    Par DrOOMMgba dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 02/06/2007, 14h54
  2. [CKEditor] insérer le contenu saisi dans la base de données
    Par dedel53 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 31/05/2007, 15h41
  3. Controle de saisie sur une liste déroulante
    Par antier dans le forum IHM
    Réponses: 3
    Dernier message: 07/12/2005, 05h42
  4. Test des liens vide sur une base de données
    Par FLANQUART Marie dans le forum ASP
    Réponses: 1
    Dernier message: 10/11/2005, 14h35
  5. Réponses: 4
    Dernier message: 16/06/2005, 15h37

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