Conversion en minuscules

Bonjour à tous,

J'aimerai convertir toutes les valeurs d'une plage de cellule en minuscule. Pour cela j'ai écris ces deux codes :

Sub Minuscule()

Application.ScreenUpdating = False 

  derniereLigne = Cells(Rows.Count, "N").End(xlUp).Row + 1

 For Each x In Range("N6", "N" & derniereLigne)
     x.Value = LCase(x.Value)
 Next

Application.ScreenUpdating = True

End Sub

et

Sub Minuscule()
Dim cellule As Range

Application.ScreenUpdating = False

 derniereLigne = Cells(Rows.Count, "N").End(xlUp).Row + 1

For Each cellule In Range("N6", "N" & derniereLigne)
cellule = LCase(cellule)
Next

Application.ScreenUpdating = True

End Sub

Mais rien à faire, mon fichier plante systématiquement .... Une idée ?

Merci d'avance ;)

Pour info, dans la colonne N il y'a 7 lignes .... Mais à la fin de l'année j'en aurais probablement plusieurs centaines.

bonjour,

essaie ainsi, mais ta syntaxe est correcte, quel message reçois-tu ?

For Each x In Range("N6:N" & derniereLigne)

comme tu n'as pas mis de nom de feuille, l'opération se fera sur la feuille active.

Bonjour,

Normalement il ne devrait pas planter, mais tu peut déjà ôter les +1 de la recherche de la dernière ligne

Voir ce qu'il y a dans les cellules qui pourrait buguer

Re H2so4,

Si je mets

For Each x In Range("N6:N" & derniereLigne)

Alors j'ai l'erreur d'exécution '1004': Erreur définie par l'application ou par l'objet.

M12,

Merci pour l'info, je l'ai fait.

En fait, j'ai l'impression que le code est trop "lourd" ... quand je le lance, Excel mouline puis plante ...

Du coup j'ai pensé quand le découpant cela l'aiderai ..., ce qui donne ceci :

dans la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range

    If Target.Address = "$P$2" Then

        Call Module2.Minuscule
        Call Module2.minuscule2
        Call Module1.Recherche

    End If

End Sub

les 3 modules :

Sub Minuscule()
Dim cellule As Range

  derniereLigne = Cells(Rows.Count, "N").End(xlUp).Row

Application.ScreenUpdating = False

' Version 1
'   For Each x In Range("N6:N" & derniereLigne)
'      x.Value = LCase(x.Value)
'   Next

'Version 2

For Each cellule In Range("N6", "N" & derniereLigne)
cellule = LCase(cellule)
Next

Application.ScreenUpdating = True

End Sub
Sub minuscule2()
Dim cellule As Range

'  derniereLigne = Cells(Rows.Count, "N").End(xlUp).Row + 1

Application.ScreenUpdating = False

 ' Version 1  
   For Each y In Range("P2")
      y.Value = LCase(y.Value)
   Next

' Version 2

'For Each cellule In Range("P2")
'cellule = LCase(cellule)
'Next

Application.ScreenUpdating = True

End Sub
Sub Recherche()
Dim Var As String, valeur As String
Dim i As Integer

         With ActiveSheet                                                                                             

            For i = 6 To .Range("N" & Rows.Count).End(xlUp).Row                                                         

                If Cells(i, "N") Like "*" & "*" & Cells(2, "P") & "*" & "*" Then                                        

                    If valeur = "" Then

                       valeur = "''" & Cells(2, "P") & "''" & " a été trouvé sur la ligne : " & vbCrLf & vbCrLf & i

                Else:

                      valeur = valeur & vbCrLf & i

                    End If

                End If

            Next i

        End With

    If valeur <> vbNullString Then MsgBox valeur, , "Résultat de la recherche"

    If valeur = vbNullString Then

        MsgBox ("''" & Cells(2, "P") & "''" & " introuvable ou incorrect"), , "Résultat de la recherche"

    End If

End Sub

Si je ne lance que le premier module, pas de souci ça fonctionne mais l'appel des 3 modules me fait planter le fichier.

Tout ça me fait penser que le code est bel et bien fonctionnel, le problème viendrait donc d'ailleurs ?...

bonjour,

tu utilises worksheet_change, qui se déclenche dès qu'un changement est constaté sur ta feuille, or tes procédures modifient le contenu des cellules sur la feuille.

Si tu as beaucoup de celulles non-vides dans ta colonne N, inactive la gestion d'événement avant l'appel de tes procédures et reactive-les après :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range

    If Target.Address = "$P$2" Then
        application.enableevents=false
        Call Module2.Minuscule
        Call Module2.minuscule2
        Call Module1.Recherche
        application.Enableevents=true
    End If

End Sub

Re,

J'ai intégrer votre code, la première fois que je l'ai lancé l'(erreur d'exécution '438': Propriété ou méthode non gérée par cet objet) c'est affiché sur la ligne

        Application.Enable events = True

Si je la mets en commentaire, plus de problème.

Par contre impossible de relancer le code sans d'abord fermer le fichier et le rouvrir. Est-ce normal ?

bonjour,

  Application.Enableevents = True

tu as peut-être aussi beaucoup de formules et de recalcul dans ton classeur.

Re,

Il ne me semble pas. Je vous le joins, je l'ai anonymisé.

-Dans la colonne N des Référence de chantier (qui vont ce remplir au fur et à mesure de l'année).

-Dans la cellule P2, on rentre un mot, il cherche et affiche sur une MsgBox les correspondances.

Le but de d'avoir la colonne N et la cellule P2 en minuscule, c'est que si dans N le mot est inscrit avec une majuscule et pas dans la cellule 2P alors Excel ne trouve pas de correspondance.

Si il est possible de faire autrement, ça me va également.

;)

Rechercher des sujets similaires à "conversion minuscules"