Majuscules et NomPropre -EXCEL

Résolu/Fermé
gcpas13 - 17 févr. 2010 à 18:07
gcpas13 Messages postés 6 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 février 2010 - 20 févr. 2010 à 04:45
Bonjour,

Je fais du depouillement d'acte et j'aimerais que la saisie de certaine colonne soit automatisée.
que lorsque j'ecrit en minuscule, mes cellules ce transformes seules.
Car il y a plusieurs feuilles et des miliers de lignes dans chaques feuilles.

Par exemple:
1) Les colonnes B, D, F, J, K, N, R, T, X, AN, AQ doivent être en Majuscules.
2) Les colonnes C, E, M, O, S, U, W, Y, AO, AR doivent être en Nom propre (Chaque mot doit commencer par une majuscules)

Je n'y connais pas grand choses en BVA, sur la toile, j'ai trouver des codes, mais soit la feuilles completes est en Majuscules soit en Nompropre.

Merci pour ceux qui voudrons bien m'apporter leur aide.

Salutations
A voir également:

11 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
17 févr. 2010 à 23:18
Bonjour,

J'avais mal lu, je te transforme la feuille après saisie...
Sub ConvertiM()
    Dim colsM As Variant, colsNP As Variant, c As Variant, i As Long, j As Long
    'colonnes à convertir en majuscules
    colsM = Array("B", "D", "F", "J", "K", "N", "R", "T", "X", "AN", "AQ")
    'colonnes à convertir en Nom Propres
    colsNP = Array("C", "E", "M", "O", "S", "U", "W", "Y", "AO", "AR")
    For Each c In colsM
        For j = 1 To Range(c & "65536").End(xlUp).Row
            If Not IsNumeric(Range(c & j).Value) And Not IsDate(Range(c & j).Value) Then
                Range(c & j) = UCase(Range(c & j))
            End If
        Next j
    Next c
    For Each c In colsNP
        For j = 1 To Range(c & "65536").End(xlUp).Row
            If Not IsNumeric(Range(c & j).Value) And Not IsDate(Range(c & j).Value) Then
                Range(c & j) = Application.Proper(Range(c & j))
            End If
        Next j
    Next c
End Sub

Si tu veux vraiment au fil de l'eau redemande...
eric
1
gcpas13 Messages postés 6 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 février 2010
18 févr. 2010 à 02:18
Salut Eric

Merci de ta réponse...
Ton code fonctionne à merveille sur des fichiers déjà "pleins".

Par contre, ce que je recherche c'est la possibiliter de cette transformation dès la saisie, cela évite d'avoir à revenir à chaque fois sur le feuille.

Donc si tu peux me redonner un coup de pouce...serait génial

Merci

Josyan
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
18 févr. 2010 à 07:32
Bonjour,

A mettre dans chaque feuille concernée :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim colsM As Variant, colsNP As Variant, c As Variant, col As String, i As Long, j As Long
    'colonnes à convertir en majuscules
    colsM = Array("B", "D", "F", "J", "K", "N", "R", "T", "X", "AN", "AQ")
    'colonnes à convertir en Nom Propres
    colsNP = Array("C", "E", "M", "O", "S", "U", "W", "Y", "AO", "AR")
    Application.EnableEvents = False
    col = Mid(Cells(1, Target.Column).Address, 2, Len(Cells(1, Target.Column).Address) - 3)
    For Each c In colsM
        If col = c Then
            If Not IsNumeric(Target.Value) And Not IsDate(Target.Value) Then
                Target.Value = UCase(Target.Value)
                
            End If
        End If
    Next c
    For Each c In colsNP
        If col = c Then
            If Not IsNumeric(Target.Value) And Not IsDate(Target.Value) Then
                Target.Value = Application.Proper(Target.Value)
            End If
        End If
    Next c
    Application.EnableEvents = True
End Sub


eric
1
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
19 févr. 2010 à 07:14
Bonjour,

Voici la procédure complète :
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    'cellules en majuscules
    If Not Intersect(Target, Union([C12], [H12])) Is Nothing Then
        If Not IsNumeric(Target.Value) And Not IsDate(Target.Value) Then
            Target.Value = UCase(Target.Value)
        End If
    'cellules en Nom Propre
    ElseIf Not Intersect(Target, Union([C11], [H11])) Is Nothing Then
        If Not IsNumeric(Target.Value) And Not IsDate(Target.Value) Then
            Target.Value = Application.Proper(Target.Value)
        End If
    End If
    Application.EnableEvents = True
End Sub

Comme on retrouve la colonne C qui était déjà définie je suppose que c'est sur une autre feuille.

Sinon, si c'est sur la même feuille, je suppose que ça doit prendre le dessus sur la macro qui traite toute la colonne et doit être exécuté après. Dans ce cas copier le code (sans sub, end sub et Application.EnableEvents) et le mettre à la fin de l'autre, avant Application.EnableEvents = True.

eric
1
gcpas13 Messages postés 6 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 février 2010
18 févr. 2010 à 16:15
Un très très grand merci...

Je viens de tester dur un dépouillement c'est GENIAL...
Et en plus j'ai reussi a l'adapter à une autre feuille qui n'avait pas les même colonnes.
Je te remercie vivement.

Salutations
Josyan.
0

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

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
18 févr. 2010 à 20:35
Merci pour le retour et bonne continuation
eric
0
gcpas13 Messages postés 6 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 février 2010
19 févr. 2010 à 00:05
Salut Eric....Encore moi,

J'essaye de comprendre le cheminement de ce que tu m'a donner... mais dur dur, j'y comprends pas vraiment tout.

Je reviens donc vers toi avec une autre question.
Si je voulais faire la même chose que pour mes colonnes mais avec cette fois ci, juste pour des cellules...
avec:
cellules C12 et H12 en majuscules
et cellules C11 et H11 en NomPropre...

Que devrais-je modifier à ton code pour que cela fonctionne...

Encore merci
Josyan.
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
19 févr. 2010 à 00:14
Re,

Vite fait un exemple car c'est l'heure du dodo :
If Not Intersect(Target, Union([C12], [H12])) Is Nothing Then
    If Not IsNumeric(Target.Value) And Not IsDate(Target.Value) Then
        Target.Value = UCase(Target.Value)
    End If
End If


Tu peux ajouter autant de ref que tu veux dans union()
Toujours dans l'evenement change
eric
0
gcpas13 Messages postés 6 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 février 2010
19 févr. 2010 à 01:57
Salut,

C'est vrai que pour toi c'est l'heure du dodo..moi j'ai moins 6h de décalage par rapport à toi.
Merci de ta patience et de me répondre...

Bon j'ai essayer de comprendre ... et bien c'est pas gagner...

Dans le code Nº que tu m'avais noté, je crois comprendre que la ligne qui commence par Dim est la déclaration...
ensuite la désignation des colonnes.
Le reste j'ai pas tout suivis...donc je ne sais pas ou mettre le 3ème codes...

Désolée, c'est pas trop mon truc et je rame.
Mais comme j'aime bien savoir le pourquoi du comment je me permets de t'importuner de nouveau.

Si tu pouvais me faire la meme chose pour mes cellules Majuscules et Nompropre en m'expliquant la démarche des formules employées.

Je vais essayer aussi de trouver sur le net un "dictionnaire" de VBA.

Encore merci merci de ton aide.
Josyan
0
gcpas13 Messages postés 6 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 février 2010
19 févr. 2010 à 16:22
Bonjour Eric,

Merci Merci....

Je viens de tester sur ma feuille, une vrai merveille....

Effectivement il s'agit d'une autre feuille, celle si c'est pour des communiants et des soldats.
Je commence à comprendre un peut mieux, en fait pour chaque caractéristiques (majuscules, nompropre) il faut un nouveau code. Par contre pourquoi mettre une ligne qui semble vouloir dire, si c'est pas numerique ou si c'est pas une date?? celà a t'il vraiment une importance?.

Bonne journée
Josyan.
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
19 févr. 2010 à 17:28
En vba il est préférable de ne faire travailler les fonctions que sur les types de données qu'elles attendent.
Souvent ça génère une erreur car contrairement aux fonctions feuilles il n'y a pas de conversion automatique lorsque c'est nécessaire...
Là, à-priori, on pourrait se passer du test isnumeric (d'ailleurs ça m'étonne) mais une date qui passe par Ucase se retrouve transformée en chaine. Un recherchev() par exemple ne la retrouvera plus.
Ces fonctions travaillent sur des chaines, je ne leur passe que des chaines. De plus un traitement de chaine est souvent plus couteux en ressource qu'un test (bien que là toutes les cellules sont sensées être toutes des chaines donc toutes traitées, on est perdant...).
eric
0
gcpas13 Messages postés 6 Date d'inscription mercredi 17 février 2010 Statut Membre Dernière intervention 20 février 2010
20 févr. 2010 à 04:45
Encore merci..
Merci aussi de tes explications, je comprends un peu mieux maintenant, surout que j'ai aussi trouver un "manuel" du language pour m'aider...
Encore une grand merci et excuse moi de ma réponse tardive, j'etais absente aujourd'hui.
Josyan
0