Controles des données dans un tableur
Bonjour à tous,
Je me lance, j'ai besoins de l'aide des dieux du VBA !
Je vais tenter d'être le plus clair possible d'ou le pavé ci-dessous
Dans le cadre d'un stage, une partie de mon travail est de créer un fichier d'intégration de données (qui permet en fait de recentraliser toutes les données provenant d'autres fichiers non structurés). Le but final sera l'intégration dans une base de données que j'ai déjà crée. Bref, revenons à notre fichier d'intégration: il est composé de plusieurs colonnes.
Chacune d'entres-elles contient un certains type de données (ou métadonnées) pour lesquelles j'ai crée des contrôles (ou aide à la saisie) en utilisant l'outil de validation de données proposé par excel. Ces contrôles se font sur des formats alphanumériques, des listes déroulante, des lites déroulantes en cascade, des formats nombre etc.. Une partie de mes colonnes se remplies automatiquement grâce à des formules conditionnelles.
Par contre certains des tests sont effectués sur la case elle-même ce qui me vaut le légendaire refus d'excel (formule circulaire).
Dans l'objectif de pouvoir contrôler ces valeurs numériques, je me suis dis que faire du VBA serait une bonne solution. De plus, je souhaitais instaurer un deuxième niveau de contrôle sur toutes les données avec une macro qui reprennent aussi tous les test de validations, et qui vérifie que que certaines cases sont bien remplies (certaine cases sont dépendantes des autres donc elles doivent être remplies). Finalement, je veux également vérifier que toutes les valeurs intégrées dans le tableau correspondent à celles que j'ai contrainte (en d'autres termes, je ne veux pas que des petits malins défasses mes tests et me rendent un fichier "corrompu" qui va me poser des problèmes lors de l'intégration dans la base) et aussi enlever les _ qui ne seront pas dans la base (pour ça j'ai enregistré une macro qui fonctionne).
Donc il faut que je reprenne chacune de mes colonnes et que je vérifie ligne par ligne que les cellules sont remplies correctement.
Mon gros problèmes, je n'ai pas de super compétences en VBA et je tourne en rond malgré les supports tutos de ce site.
Je ne connais pas à l'avance le nombre de lignes (toutes les colonnes ont le même nombre de lignes (par contre).
J'ai réussi à les déterminer et a copier le contenu de mon fichier. mais je voudrai intercaller mes tests et je ne sais pas trop comment les positionner dans la boucles (du coup, il ne faut peut etre pas faire de boucles pour les colonnes).
De plus, je ne sais pas comment faire des vérification pour les alphanumériques (j'en ai deux types: colonne 1 et un autre avec 2 chiffres devant EST au milieu puis deux chiffres à la fin), comment dire qu'une case peut contenir différente valeurs (celle de la listes) et j'ai pleins d'autres questions mais commençons déjà par là si vous avez eu le courage de tous lire !!
Si la valeur est fausse, je souhaite colorer la case en rouge (je sais le faire).
Voici la petite macro que j'ai faite:
Sub Macro6()
' Développement du code pour la copie des données de la page d'intégration à la page base de données.
' Première étape pour le calcul du nombre de ligne ou les données ont été intégrées (on prend la première colonne
' comme référence car elle correspond aux numéros d'échantillons qui doivent-être renseignés obligatoirement)
' et on enlève 1 pour la première ligne qui contient les titres.
'
Sheets("Tableau_integration").Select
dl = -1 + Range("A" & Rows.Count).End(xlUp).Row
MsgBox "Pour information, votre tableau contient" & " " & dl & " " & "lignes !"
ActiveWindow.SmallScroll Down:=-30
For j = 1 To 11 'Je connais mon nombre de colonne'
For i = 2 To dl + 1 'Le nombre de ligne'
Sheets("Tableau_integration").Select
Cells(i, j).Select
Selection.Copy
Sheets("essaie_enregistrement").Select
Cells(i, j).Select
ActiveSheet.Paste
Next i
Next j
End SubJe vous joint également le fichier excel que j'ai réduis par rapport a mon projet initial.
Merci de votre aide
Bonjour,
Une première étape consiste à te simplifier la vie ...
Ta macro (qui est perfectible) ne fait que recopier les données ...
Quel est donc précisément le premier contrôle-test à effectuer sur tes données ... ???
Ton fichier joint ... avec suppression du 'circulaire' et macro 'light' ....
Hello James,
Oui effectivement, je ne fais que recopier la donnée mais en lisant cellule par cellule (j'ai quand même réussis a faire ça : petite victoire !).
La suppression du circulaire permets de faire un calcul dans une cellule en reprenant cette valeur?
La macro "light" c'est quoi ?
Pour répondre à ta question, tu as raison commençons par le début:
Colonne A:
Je veux vérifier que les cellules sont remplies avec le format de saisie détaillé dans la case jaune:
Veuillez saisir la référence dans le format suivant:
* 3 premiers caractères sont EST et en majuscules.
* 5 derniers caractères sont des chiffres.
* La case comporte 8 caractères.un alphanumérique avec EST en premier et 5 chiffres derrières.
Dans la formule de validation des données ça donne
=ET(GAUCHE(B3;3)="EST";ESTNUM(DROITE(B3;NBCAR(B3)-3)*1);NBCAR(B3)=8; EXACT(B3;MAJUSCULE(B3)))J'ai aussi la même manipulation a faire pour une colonne avec des cellules qui devront être au format:
Veuillez saisir la référence dans le format suivant:
* Case: 6 caractères.
* 3 premiers caractères sont EST (en majuscules).
* 3 derniers caractères sont des chiffres allant de 101 à 999
Ma formule de validation est la suivante (mais elle ne fonctionne pas)
=ET(GAUCHE(A3;3)="EST";ESTNUM(DROITE(A3;NBCAR(A3)-3)*1);NBCAR(A3)=6;DROITE(A3;3)>100;DROITE(A3;3)<=999;EXACT(A3;MAJUSCULE(A3)))Colonne B,
C'est une simple liste donc je veux vérifier que ce qui est écrit dans la case correspond bien à cette liste.
Colonne c,
Je veux vérifier que la cellules n est inférieure à la cellule n+1.
Colonne D et E:
E dépend de la sélection de D, typiquement quand tu sélectionnes D=Callovo-Oxfordien alors E peut etre égale à toutes les valeurs de la liste.
Colonne F, G, H, I
Même combat que précédamment
Colonne J
C'est une valeur qui doit rentrer dans un interval (gamme de valeur)
Colonne K
C'est une valeur auto-incrémenté et qui dépend des choix fait en F,G,H,I.
Ici, je n'ai pas mis l'intégralité de mon tableau (28 colonnes en vrai) mais ces quelques colonne résumes l'ensemble du travail.
Il me faut aussi vérifier que certaines cellule ne sont jamais vides (typiquement les colonnes C et J sont obligatoirement remplies) et certaines colonnes sont en cohérences avec d'autres (typiquement si je prends l'Id_echantillon colonne A, forcément le support d'analyse colonne G est échantillon).
En fait, je ne suis pas sure que ce soit si dure que ça a faire, (long par contre c'est sure).
J'ai mon idée en If, else mais pas en VBA, c'est un language que je ne connais pas du tout et j'ai besoins que l'on m'oriente !
Merci d'avance.
Re,
La macro "light" c'est quoi ?
... celle ... qui se trouve dans ton fichier ....
Ah Oui d'accord ma macro 6 simplifiée !
Merci pour celà et pour les dimensions !
Mais du coup avec cette façon de faire, tu intercales ou les tests et comment ?
Re,
Je ne sais pas si c'est du cou ... ou du coup ... mais on vient à ton principe général de contrôle des données ...
Que doit produire ton contrôle .... cellule par cellule ...???
Re,
Oui, je voudrais vérifier cellule par cellule mais les formats sont les mêmes pour toutes les cellules d'une même colonne.
1 contrôle par colonne, tests sur toutes les cellules de la colonne puis on passe à la colonne suivant.
Désolée si je m'exprime mal, le vocabulaire informatique me fait défaut.
A plus
Re,
Peux-tu être 'Claire' .....
Il ne s'agit pas de vocabulaire informatique ....
Que doit produire le Contrôle ???