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 :

Vérifier la cohérence des données d'un fichier Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Par défaut Vérifier la cohérence des données d'un fichier Excel
    Bonjour,

    C'est mon premier post sur le forum. Je ne me suis pas encore présenté.
    Je suis stagiaire et je n'ai que 1 moi pour créér ce projet assez fou ! Mon entreprise me demande de vérifier les informations contenues dans des fichiers excel. En effet, l'entreprise vend ces fichiers excels à un autre entreprise, et il faut que les validité des données soient d'une qualité irréprochable.

    L'entreprise qui m'embauche perd beaucoup de sous à causes des erreurs (oublis) humaines dans les fichiers excel.
    Je suis chargé de créer un vérificateur de données automatique. Une fois que le fichier excel est créé par les techniciens, ces personnes n'ont plus cas utiliser le vérificateur pour voir s'il n'ont pas oublié de remplir des champs etc.
    Par exemple il faut vérifier que le champ "code postal" contienne bien un code postal, et un code valide (à 5 chiffres). Il faut aussi tester le numéro de téléphone pour s'assurer que le technicien ne s'est pas trompé en tapant, il ne faut pas qu'il fasse 9 chiffres au lieu de 10. Ce sont des exemples, il y a des centaines de tests à faire en réalité.

    L'onglet "validation des données" de Excel n'est pas assez complet.

    Je pourrai programmer tout ça en VBA mais ça me parait vraiment très très long car j'ai beaucoup de structure de test à faire.

    Voici une partie du fichier excel à vérifier:
    https://www.dropbox.com/s/pcyiidp3se...%202.xlsx?dl=1
    Voici un screenshot du fichier excel si vous ne souhaitez pas l'ouvrir:
    https://www.dropbox.com/s/pwu4t2h8b8...%20pm.png?dl=1

    Je vous remercie par avance infiniment pour votre aide
    Je suis preneur de n'importe quelle idée et information.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 718
    Par défaut
    Bonjour,

    La validation de données sans autre artifice doit être capable de faire 90% du job de vérification de saisie au moins.
    Pour les 10% restants, ce sera sûrement aussi possible mais en se cassant un peu plus la tête. Pour éviter de trop se casser la tête, tu peux la coupler à une fonction personnalisée basée sur les expressions régulières comme celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function RegExTest(textToTest As String, textPattern As String) As Boolean
        Dim reg
     
        Set reg = CreateObject("VBScript.RegExp")
        reg.pattern = textPattern
        RegExTest = reg.test(textToTest)
    End Function
    Ex pour un numéro de téléphone en case A1, le test serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RegExTest(A1; "0\d(( \d{2}){4}|\d{8})")
    (10 chiffres requis éventuellement séparés par un espace tous les deux chiffres; 1er chiffre égal à 0)

    Ex pour un code postal en France métropolitaine (enfin je suis pas spécialiste, c'est peut-être pas exactement ça)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RegExTest(A1; "(0[1-9]|[1-8]\d|9[0-5])\d{3}")
    => On accepte les codes dont les deux premiers chiffres sont entre 01 et 95. Bien sûr ce serait facile aussi à faire avec des formules traditionnelles; c'est pour l'exemple.

    Pour vérifier si toutes les données requises ont bien été saisies, tu as plusieurs choix, notamment:
    1- Mise en forme conditionnelle sur les cases requises mais encore vides.
    2- Une formule dans une case quelque part testant si aucune des cases requises n'a été laissée vide.
    3- A supposer que tu ais donné un nom à chaque case requise, une macro bouclant sur les noms et vérifiant que les cases pointées ne sont pas vides.

    En bref, MFC + validation de données + éventuellement un peu de VBA (mais un tout petit peu alors) sont tout ce qu'il te faut.
    Il ne faut pas t'en faire toute une montagne.

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Si vous le permettez : ce qui me frappe :
    1)
    L'entreprise qui m'embauche perd beaucoup de sous à causes des erreurs (oublis) humaines dans les fichiers excel.
    2)
    Mon entreprise me demande de vérifier les informations contenues dans des fichiers excel. En effet, l'entreprise vend ces fichiers excels à un autre entreprise, et il faut que les validité des données soient d'une qualité irréprochable
    Je n'a, de toute ma vie, jamais vu une entreprise sérieuse (vendeuse, en plus), ne pas inclure de telles vérifications au moment même de la saisie ou (au plus tard) à l'issue même de la saisie.
    Voilà donc une "affaire" qui me laisse pour le moins perplexe !

  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,

    Une proposition se basant sur une feuille Modèle pour les contrôles avec une certaine syntaxe.
    Une saisie est soit obligatoire (commence par obli, soit optionnelle (commence par opt
    obli: et opt: sont suivi du type de contrôle à appliquer :
    - contrôle spécifique comme obli: email, opt: tel, ...
    - contrôle appartient à une liste comme obli: UPR. Bien que ce contrôle ne devrait pas avoir lieu à posteriori je l'ai quand même mis
    - contrôle avec Like() comme obli: IMB/#####/[A-Z]/##[A-Z]# (qui est peut être faux, je n'ai mis que des exemples)

    Si le principe te parait applicable dans ton cas (il ne faut pas x cas particuliers sinon autant développer un truc dédié) tu pourrais compléter avec une syntaxe pour des regex plus complets que Like ou d'autres contrôles spécifiques.
    J'ai prévu un contrôle spécifique pour les dates mais rien mis dedans, à toi de voir.
    Limité à 10 anomalies par une constante, je les sors avec un msgbox. Tu pourrais faire un userform non modal qu'il puissent corriger en ayant la liste sous les yeux.

    Je n'ai pas poussé les tests à fond, je te laisse contrôler.
    eric

    edit: ajout d'une version complétée avec contrôle par regex (Controle saisies.xlsm)
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Cyril_B Voir le message
    Je pourrai programmer tout ça en VBA mais ça me parait vraiment très très long car j'ai beaucoup de structure de test à faire.
    Et donc... ton idée ce serait que quelqu'un d'autre le fasse à ta place ???

    L'onglet "validation des données" de Excel n'est pas assez complet.
    A ta place, j'aurais plutôt opté pour la mise en forme conditionnelle.

    Ca permet de mettre autant de règles que tu veux pour chaque cellules indépendamment.
    Tu peux mettre des couleurs différentes en fonction des erreurs détectée ou de la gravité de l'erreur.
    Tu peux même mettre des conditions qui prennent en compte le résultat d'autres cellules.
    Les opérateurs pourront donc être alertés instantanément des erreurs qu'ils introduisent dans les données.

    Seul défaut : en VBA, on ne peut pas vérifier la couleur qui est générée par une MFC.
    Le test final pourra être un test visuel.

  6. #6
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Par défaut
    Bonsoir à vous,

    Excusez moi pour ma réponse tardive, je mettais en applications vos idées !
    Tout d'abord merci infiniment à vous pour toutes ces bonnes pistes !

    Effectivement je devrais m'en sortir dans l'ensemble.
    Alors j'ai oublié de préciser quelque chose, je n'ai pas le droit de toucher une seule case du fichier à traiter. Je dois me débrouiller de travailler dans un autre excel, ou d'extraire les données. La mise en forme conditionnelle n'est pas adaptée car la vérification du fichier doit se faire après qu'il soit rempli. Le technicien constitue le fichier excel, ensuite seulement la vérification est faite.

    Je pense que je vais m'en sortir pour tout ce qui est valeurs dans les cellules excel. En revanche je bloque quelque part: comment utiliser une structure de test sur un objet.
    Le fichier Excel contient des bouton à cocher, des images, des cercles, des traits. Des formes en fait ! Et il faut que je teste ça.

    Voici un exemple en image: en fonction du bouton coché, il faut que je vérifie que la cellule du dessous contient bien du texte:
    https://www.dropbox.com/s/swmxw5yewp...%20pm.png?dl=1

    Voici un autre exemple:
    Il faut que je vérifie qu'il y a bien une image, ensuite il faut que je vérifie qu'il y a bien un sous-titre sous cette image, ensuite il faut que je vérifie qu'il y a bien un cercle, rouge, qui est positionné sur l'image. Autrement dit... je pense que c'est impossible malheureusement :
    https://www.dropbox.com/s/68lz3zt2xd...01_pm.png?dl=1

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Donc, tu n'es absolument pas sûr de pouvoir te baser entièrement sur une "solution générique" ? Tu ne sais jamais si et quand tu vas devoir repartir à zéro à cause d'un technicien "trop créatif" ?

    Si c'est cela, je pense que tes patrons et tes "copains" techniciens devraient Impérativement lire, relire et méditer la réponse de unparia.

    Parce que, tu vas passer le reste de tes jours à faire cela...

    La règle d'or en programmation (et même en "excellisation") est que c'est beaucoup moins coûteux de le faire de la bonne façon du premier coup. Le plus coûteux, c'est de corriger un produit déjà commercialisé. Toi, tu es presque avec le produit commercialisé et les coûts ne doivent pas en être bien loin.

    Probablement, que quelques règles de conception et un peu de discipline de la part des techniciens te faciliteraient la vie et tu pourrais te concentrer sur les "cas extrêmes".

  8. #8
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Par défaut
    Le fichier est très long à remplir, et comme les techniciens sont des humains, ils font des erreurs. Toujours est-il que non je ne peux pas "prévenir" plutôt que "guérir". Le fichier d'origine ne doit pas bouger d'un poil ! Il faut que je fasse la vérification après coup.
    Il y a déjà de la mise en forme conditionnelle dans le fichier, mais ça ne suffit pas, il y a tellement de cas. Il y a au minimum 250 champs à vérifier dans le fichier.

    Ce n'est pas compliquer de regarder si une cellule est vide ou pleine, ce qui est dur c'est de travailler avec des objets aussi, comme des images, des cercles, des boutons etc...

    Avez vous des idées à ce sujet ?

    Merci pour votre aide et le temps que vous m'avez accordé ! Vous êtes au top !

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Citation Envoyé par Cyril_B Voir le message
    Je pourrai programmer tout ça en VBA mais ça me parait vraiment très très long car j'ai beaucoup de structure de test à faire.
    Tu t'attends à quoi d'autre vu cette discussion créée dans le forum VBA ?‼

    En dehors de l'incohérence de l'entreprise à éviter des contrôles en amont directement lors de la saisie (validation) …
    Évitant justement ta future usine à gaz de contrôle en VBA !


    Citation Envoyé par Cyril_B Voir le message
    Le fichier d'origine ne doit pas bouger d'un poil ! Il faut que je fasse la vérification après coup.
    Là c'est à se demander pourquoi avoir créé cette discussion !


    Quant aux objets, regarder leurs propriétés dans l'aide interne VBA …

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    Comme d'habitude on envoie toujours les stagiaires a la chasse au dahu

    pour faire toute ces vérifications il faudrait être sur que tout ces fichiers soit identiquement conçus sinon ca risque d'être compliqué

    pour ma part j'ai ouvert un de tes fichiers et bien je l'ai refermé tout de suite

    je réitère donc ce que l'on t'a dis plus haut parle en a la hiérarchie qui fasse en sorte que des fichier formaté soit instaurés et c'est seulement a ce moment la que l'on pourra faire une vérif. automatique de tes cellules

    et file un coup de pied au c... a tes techniciens

    d'autant plus que ce sont des fichiers facturés !!!!! si j'ai bien compris

    donne moi le nom de la boite que je fasse pas appel a eux
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Par défaut
    Bonjour,

    Je suis moi même stagiaire, et on m'a demandé aussi des contrôles sur des fichiers, un peu tout comme toi.

    Ma première démarche a été de demandé à ce qu'on utilise un modèle un fichier type, sinon les contrôles seraient impossible ou au mieux archaïque.
    Le demandeur l'a très bien pris et a compris la situation. Il en a résulté que pour la relecture ensuite aussi été facilité.

    Je connais le principe des techniciens tête de mule. mais Si tu veux mené ton projet à bien et même pour le bien de ton entreprise instauré un modèle serait l'idéal. Sinon faudrait faire des vérifications en fonction du nom de la colonne, pour peut que le technicien l'ait bien écrit ... bref.

    Le mieux serait de leur mettre un fichier avec déjà la mise en forme les colonnes dans l'ordre etc. Déjà les techniciens gagneront du temps et en plus cela rendra ton travail faisable.

    Ensuite si tu dois procéder à des vérifs sans touché ton fichier, tu pourrais boucler sur le tableau entier avec un For each bien fabriqué et faire un contrôle en fonction du numéro de colonne. Ensuite si erreur il y a tu le notifies sur un autre classeur en précisant la ligne avec erreur, la colonne et au choix une bref description de l'erreur, sur ce fichier tu sautes une ligne et rebelote.
    Avec seulement 250 champs remplit cela devrait être très rapide, après à voir le type de vérification.
    Si tu dois regarde si une cellule est vide un contrôle range = empty suffit et pour comparer à un pattern je te conseille d'utilisé la fonction "like".

    DeathZarakai.

  12. #12
    Membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Par défaut
    Bonjour à vous !

    Je vous remercie pour toutes ces réponses.
    A la lecture de vos commentaires, je pense que je n'ai pas précisé quelque chose, qui pourtant est très important.
    Les techniciens se contentent de remplir un fichier template. Ce qui veut dire que tous les fichiers que j'ai à vérifier ont la même structure.
    Tous les fichiers que je dois traiter sont exactement les mêmes, à une chose près: la valeur des champs justement.

    Je peux très bien tester la cellule C2 de la feuille numéro 2 pour verifier qu'elle ne soit pas vide, ce test va marcher sur tous les fichiers excels, rien ne varie dans la structure des fichiers à tester.

    J'ai commencé à faire un chose toute bête: utiliser les structures de test et les fonctions dans un second fichier excel. ce nouveau fichier excel va lire les données en temps réel dans le fichier à vérifier.
    Voici un exemple:

    Voici un screenshot du champ que je dois vérifier dans le fichier:
    https://www.dropbox.com/s/67pmvueby9...ifier.png?dl=1

    Voici mon nouveau fichier excel qui fait le test:
    https://www.dropbox.com/s/vxugcideku...imple.png?dl=1

    Qu'en pensez-vous ? C'est trop simple non ? Je pense que je vais être limité dans les possiblités, notamment pour faire une vérification sur des objets.

  13. #13
    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,

    Un retour sur ce que je t'ai proposé au post 4 serait le bienvenu même si ça ne t'intéresse pas...
    eric

Discussions similaires

  1. Exportation des données dans un fichier Excel
    Par Koukouknizou dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 14/07/2007, 14h22
  2. Réponses: 1
    Dernier message: 14/05/2007, 14h52
  3. Réponses: 1
    Dernier message: 09/05/2007, 23h10
  4. updater des données dans mon fichier excel
    Par gantec dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/02/2007, 16h01
  5. Réponses: 6
    Dernier message: 08/12/2006, 13h07

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