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

Signaler
Messages postés
3
Date d'inscription
vendredi 8 avril 2011
Statut
Membre
Dernière intervention
13 avril 2011
-
Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
-
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

Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
144
Bonjour,

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

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

Messages postés
3
Date d'inscription
vendredi 8 avril 2011
Statut
Membre
Dernière intervention
13 avril 2011

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
Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
144
Bonjour,

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

Messages postés
3
Date d'inscription
vendredi 8 avril 2011
Statut
Membre
Dernière intervention
13 avril 2011

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?
Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
144
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.