Bonjour les développeurs,
Voici mon soucis du jour :
J'ai un tableau sous Excel avec plusieurs lignes d'en-tête et pas mal de kilometres de données en-dessous, dans le tableau. Parmis les lignes d'en-tête, l'un d'elle précise le type et la longueur de la donnée présente dans chaque colonne.
Par exemple, j'ai des colonnes qui indiquent "20 Alphanumérique", "3 Alphanumérique", "Booléen", "13 Numérique", "Date"...
Je dois établir une boucle de contrôle sur les données pour vérifier qu'elles répondent bien à la condition imposée. Les cellules qui ne sont pas du bon type seront surlignées en rouge.
Voici un exemple de mon code :
J'ai DEUX questions (eh oui !).
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 Sub controle_qualite_alphanum3() Dim Col As Integer Dim Lin As Integer Dim Err As Integer Sheets("Qualité des données").Select Err = 0 Col = 2 Lin = 15 For Col = 2 To Sheets("Structure").Range("F5") If Cells(12, Col) = "3 Alphanumérique" Then For Lin = 15 To 46 Cells(Lin, Col).Select ' Ne doit contenir que des caractères alphanumériques If (Cells(Lin, Col)) <> [0-9a-zA-Z] Then mettre_en_rouge Err = Err + 1 End If ' Doit être de longueur 3 ou moins If Len(Cells(Lin, Col)) > 3 Then mettre_en_rouge Err = Err + 1 End If Next Lin End If Next Col End Sub
1°) La plus grave. Ca me bloque.
En exécutant ma macro pas-à-pas, je m'apperçois que je ne rentre jamais dans ma première condition if ("If Cells(12, Col) = "3 Alphanumérique" Then..."), alors que j'ai bel et bien des données qui ont ce type.
Je pense savoir pourquoi mais je ne sais pas comment m'y prendre. Dans mon tableau, les types et longueurs sont définis avec un retour à la ligne entre le "3" et le "Alphanumérique", tout en restant dans une seule cellule.
Y a-t-il un moyen pour forcer ma condition à considérer TOUT le contenu d'une cellule, même s'il y a un retour chariot dans cette cellule ?
Bien sur, je ne peux pas éviter d'avoir ce retour à la ligne. Je charge cet en-tête déjà tout prêt avec une autre macro.
2°) Un peu plus auxiliaire. Mais quand même.
Je n'ai pas trouvé mieux que de copier-coller mon code en changeant "3 Alphanumérique" par "5 Alphanumérique", "10 Alphanumérique"...
N'y a-t-il pas un moyen de rajouter une boucle pour rendre tout ça plus simple et plus propre ?
Merci d'avance (et désolé pour le gros pavé ! Si j'explique lentement, c'est pour qu'on comprenne vite...) !
R.
Partager