VBA _ Définir plusieurs plages avec Range

Bonjour à tous,

Je vous écris car je bloque sur un sujet ... j'ai trouvé une "solution" mais je ne la trouve pas très pratique , bref peut être que quelqu'un va pouvoir me sauver :D

Donc, je souhaite sélectionner plusieurs colonnes et effectuer les mêmes actions pour ces colonnes. Seulement lorsque j'écris mon code, la macro s'applique à toutes les colonnes.

Je pense qu'il y a un pb avec Range mais je ne trouve pas ce qui cloche :

Range("M2:M" & "Q2:Q" & "T2:T" & Cells(Rows.Count, 1).End(xlUp).Row)

Ci dessous mon code et ci joint mon fichier pour être plus claire ... :)

[ NB : j'ai plusieurs macro dans le fichier et le même pb partout ..:( , donc pour palier au problème j'ai réécris la même action pour chaque colonne ( expl : Sub b_CorrectioncaracteresA ) mais il doit y avoir plus intelligent à faire ... ]

Code initial

Sub c_Verification_caractere13()
    Dim Cel As Range
    Dim I As Integer
    Dim char As String

      For Each Cel In Range("M2:M" & Cells(Rows.Count, 1).End(xlUp).Row)
      For I = 1 To Len(Cel)

    If Not Len(Cel) = 13 Then

   Cel.Interior.Color = RGB(255, 80, 80)

    End If
Next
Next

End Sub

Code test qui ne fonctionne pas

Sub c_Verification_caractere13test()
    Dim Cel As Range
    Dim I As Integer
    Dim char As String

      For Each Cel In Range("M2:M" & "Q2:Q" & "T2:T" & Cells(Rows.Count, 1).End(xlUp).Row)
      For I = 1 To Len(Cel)

    If Not Len(Cel) = 13 Then

   Cel.Interior.Color = RGB(255, 80, 80)

    End If
Next
Next

End Sub

Merci de m'avoir lu bonne soirée !

A.

Bonjour

Essaie en remplaçant :

For Each Cel In Range("M2:M" & "Q2:Q" & "T2:T" & Cells(Rows.Count, 1).End(xlUp).Row)

par :

Dim ligne&

ligne = Cells(Rows.Count, 1).End(xlUp).Row

For Each cell In Union(Range("M2:M" & ligne), Range("Q2:Q" & ligne), Range("T2:T" & ligne))

Bye !

Bonjour à tous,

ce qui me gène c'est le nom de ta proc Verification_caractere13

Si tu dois vérifier la présence de caractère 13 (CR) ce n'est pas ça, là tu contrôles si la longueur du mot > à 13 caractères
Pour contrôler la présence d'un caractère ça serait plutôt

Sub test()
    Dim ch As String
    ch = "abc" & Chr(13) & "def"
    If InStr(ch, Chr(13)) > 0 Then
        MsgBox "trouvé"
    Else
        MsgBox "non trouvé"
    End If
        ch = "abc" & "def"
End Sub

eric

Bonjour à tout les deux et à tout le forum ,

Désolée de répondre tardivement (petit pb de PC) et Merci d'avoir pris le temps de regarder mon problème.

GMB, cela fonctionne Merci beaucoup pour ton aide :D

Eric , le nom de ma proc n'est pas claire effectivement, je vais le modifier pour que cela porte moins à confusion...
Mon but est de compter le nombre de caractères supérieur à 13, et non le 13ème caractère. Et merci pour ta macro elle va m'être utile pour améliorer la mienne :)

Au cas ou cela intéresse quelqu'un d'autre je vous met le code en entier :

Sub c_Verification_longueurmot13()

    Dim ligne&
    Dim I As Integer
    Dim char As String

    ligne = Cells(Rows.Count, 1).End(xlUp).Row

    For Each Cell In Union(Range("M2:M" & ligne), Range("Q2:Q" & ligne), Range("T2:T" & ligne))

    For I = 1 To Len(Cell)

    If Not Len(Cell) = 13 Then

   Cell.Interior.Color = RGB(255, 80, 80)

    End If
Next
Next

End Sub

Merci , et bonne journée à vous !

A.

Rechercher des sujets similaires à "vba definir plages range"