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
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
A voir également:
- Majuscules et NomPropre -EXCEL
- Si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
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
17 févr. 2010 à 23:18
Bonjour,
J'avais mal lu, je te transforme la feuille après saisie...
Si tu veux vraiment au fil de l'eau redemande...
eric
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
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
18 févr. 2010 à 07:32
Bonjour,
A mettre dans chaque feuille concernée :
eric
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
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
19 févr. 2010 à 07:14
Bonjour,
Voici la procédure complète :
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
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
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
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.
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.
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
18 févr. 2010 à 20:35
Merci pour le retour et bonne continuation
eric
eric
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
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.
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.
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
19 févr. 2010 à 00:14
Re,
Vite fait un exemple car c'est l'heure du dodo :
Tu peux ajouter autant de ref que tu veux dans union()
Toujours dans l'evenement change
eric
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
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
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
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
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
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.
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.
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
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
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
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
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
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
18 févr. 2010 à 02:18
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