VBA Excel, affecter le même format à toutes les cellules de la colonne A

Chatzii Messages postés 3 Date d'inscription vendredi 8 avril 2011 Statut Membre Dernière intervention 13 avril 2011 - 10 avril 2011 à 15:28
NHenry Messages postés 15117 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 10 mai 2024 - 13 avril 2011 à 13:06
Bonjour,
je suis débutante en VBA et voici mon souci:
je voudrais a l aide d un code VBA formater les cellules de la colonne A sous cette forme: "zz ABC 01 CE 123"

- les deux premier caractères "zz" peuvent etre mis pour des valeurs numériques genre "01" ou alors rester sous la forme "zz"
- les chaines de caractères "ABC" et "CE" n'acceptent que les lettres alphabétiques
- les chaines de caractères "01" et "123" n'acceptent que les valeurs numériques

Les chaines de caractères seront séparées l'une de l'autre par un espace.
Et chaque chaine de caractère qui ne respectera pas son format sera marquée en rouge aussi longtemps qu'elle ne sera pas corrigée.

jai commencé déja avec ce code mais je suis un peu coincée au niveau d'inserer les espaces dans mon string et de verifier que chaque chaine de caractère est belle et bien a sa position.
Et comme dernier truc j'aimerais que le code soit fait de facon dynamic de telle sorte que meme si la colonne A est déplacée vers le milieu que ce code reste uniquement valable pour cette nouvelle colonne oú la colonne A aura été déportée qui en fait n est rien dautre que notre colonne A du départ.

Dans mon fichier Excel j ai affecté à chaque colonne de ma feuille de travail un nom, ceci dit la colonne A se nomme "K_Num"
Merci d'avance pour votre intervention.
voici mon code:

Sub FormaterCellule()
Dim i As Integer
Dim Chaine As String
Dim Str(5) As String

Dim a As Integer
Dim RowRunner As Integer


For RowRunner = 3 To ActiveSheet.UsedRange.Rows.Count
Chaine = ActiveSheet.Cells(RowRunner, 1)

Str(0) Left(KKS, 2) ' on obtient string1 zz
Str(1) Mid(KKS, 4, 3) ' String2 ABC
Str(2) Mid(KKS, 8, 2) ' String3 01
Str(3) Mid(KKS, 11, 2) ' String4 CE
Str(4) Right(KKS, 3) ' String5 123

For i 0 To UBound(Str) - 1 ' For i 0 To 4
With Sheets("TauxEuro")

For a = 1 To Len(Str(i))
If i = 0 Then
If IsNumeric(Mid(Str(i), a, 1)) = True Then
.Cells(RowRunner, 1).Characters(Start:=1, Length:=2).Font.Color = vbRed
End If
ElseIf i = 1 Then
If IsNumeric(Mid(Str(i), a, 1)) = True Then
.Cells(RowRunner, 1).Characters(4,3).Font.Color = vbRed
End If
ElseIf i = 2 Then
If IsNumeric(Mid(Str(i), a, 1)) = False Then
.Cells(RowRunner, 1).Characters(8,2).Font.Color = vbRed
End If
ElseIf i = 3 Then
If IsNumeric(Mid(Str(i), a, 1)) = True Then
.Cells(RowRunner, 1).Characters(11,2).Font.Color = vbRed
End If
ElseIf i = 4 Then
If IsNumeric(Mid(Str(i), a, 1)) = False Then
.Cells(RowRunner, 1).Characters(13,3).Font.Color = vbRed
End If
End If
Next a
End With
Next i

Next RowRunner

End Sub

5 réponses

NHenry Messages postés 15117 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 10 mai 2024 159
10 avril 2011 à 16:01
Bonjour,

Et avec les regex ou l'opérateur Like ?

Chaine Like "## ??? ##" (à vérifier)

0
Chatzii Messages postés 3 Date d'inscription vendredi 8 avril 2011 Statut Membre Dernière intervention 13 avril 2011
11 avril 2011 à 14:40
Super cool ton idée NHenry - Merci

jai ecris un nouveau code qui marche aussi bien seulement je voudrais que mon code reste dynamic mais kan je remplace le "A" de Range("A" & Rowrunner) par "K_Num" qui est en fait le nom que j ai affecté a la colonneA cad: Range("K_Num" & Rowrunner), ca me signale une erreur(1004). Apparement la méthode 'Range' pour l objet '_Worksheet' n est pas compatible.

Quelqu'un aurait'il une idée ? Merci

voici mon nouveau code qui marche:

For Rowrunner = 3 To ActiveSheet.UsedRange.Rows.Count

If Not Range("A" & Rowrunner).Value Like "[A-Z][A-Z] [A-Z][A-Z][A-Z] ## [A-Z][A-Z] ###" And _
Not Range("A" & Rowrunner).Value Like "## [A-Z][A-Z][A-Z] ## [A-Z][A-Z] ###" Then
Range("A" & Rowrunner).Font.Color = vbRed
Else
Range("A" & Rowrunner).Font.Color = vbBlack
End If
Next Rowrunner
0
NHenry Messages postés 15117 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 10 mai 2024 159
11 avril 2011 à 21:38
Bonjour,

Préfère toujours utiliser les plages par défaut.
Cells(Ligne, Colonne).Value="..."

0
Chatzii Messages postés 3 Date d'inscription vendredi 8 avril 2011 Statut Membre Dernière intervention 13 avril 2011
13 avril 2011 à 10:44
salut NHenry,
pourrais tu etre un peu plus explicite stp?
jai remplacé Range("A" & Rowrunner).Value par Cells(Rowrunner, "K_Num").Value et ca me renvoit Erreur 13.
Comment y procéder?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15117 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 10 mai 2024 159
13 avril 2011 à 13:06
Bonjour,

Cells, on parle en Ligne et Colonne, donc en valeur numérique.

Si tu veux voir comment modifier ta cellule, enregistre une macro pour voir le résultat.

0
Rejoignez-nous