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 :

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
J'ai DEUX questions (eh oui !).

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.