Résolu Forcer la saisie en majuscules sur feuille Excel 2007

  • Auteur de la discussion duncan2idaho
  • Date de début

duncan2idaho

Habitué
Bonjour,

Je souhaiterais que certaines colonnes de ma feuille excel (NOM, VILLE, PAYS, etc.) se mettent automatiquement en majuscule, quelque soit la casse qu'on avait utiliser pour entrer la donnée. J'avais réussi à mettre ça en place sur un autre fichier Excel mais 2003 et mon code ne fonctionne pas sur mon fichier Excel 2007.
J'ai regardé dans le forum et je ne vois pas de réponde à ce problème précis.

Un coup de main svp?

Merci,
 

zeb

Modérateur
Salut,

Non. Pas de coup de main ici. Nous traitons les problèmes en VB, pas de bureautique :o
 

zeb

Modérateur
Non mais quel pédant ce modo "programmation" !

duncan2idaho, va dans les propriétés de la cellule concernée, dans police, trouve l'attribut majuscule. C'est tout ;)
 

duncan2idaho

Habitué
Désolé et merci! Je pensais que c'était le bon endroit vu que c'est un pb de code VBA.
 

zeb

Modérateur
Arfff, je retire ce que j'ai fais alors. Tu veux vraiment une macro en VB pour faire ça ?
Alors là, faut que le modo Windows me renvoie ton topic, et on va rapidement arranger ton affaire.

En attendant, donne nous ton code VB ancienne version.
 

duncan2idaho

Habitué
Voici l'ancien code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub '<-- pour éviter que ça coince si on sélectionne plusieurs cellules
  Select Case Target.Column
    Case 3 To 13, 15, 27, 28, 32, 33, 36, 37, 39
      Target.Value = UCase$(Target.Value)
    Case 14
      Target.Value = StrConv(Target.Value, vbProperCase)
  End Select
End Sub

Merci :)
 

zeb

Modérateur
Ben si tu te retrouves à ne pas mettre ton code entre balise
Code:
 sur le forum [b]programmation[/b], tu vas te faire engueuler par le modo. Mais là, on est en [b]Windows[/b], alors c'est cool :sol:

(C'est pas une raison pour ne pas le faire quand même.)

Ben qu'est-ce qui ne marche pas ?
Qu'est-ce qu'il dit comme erreur (numéro, message, ligne) ?
As-tu pris la précaution de mettre Option Explicit en haut de ton code ?
 

duncan2idaho

Habitué
Ouh la la, tout ça c'est du chinois pour moi lol.

Alors, le code ne fonctionne simplement pas. Pour la colonne 3 à 13, par exemple, les mots sont sensés se mettre en majuscules et ça ne le fait pas. Pas de message d'erreur. C'est aussi simple et embêtant que ça :(
C quoi "option explicit"?
 

alexandreB64

Grand Maître
Ouh la la, tout ça c'est du chinois pour moi lol.

Alors, le code ne fonctionne simplement pas. Pour la colonne 3 à 13, par exemple, les mots sont sensés se mettre en majuscules et ça ne le fait pas. Pas de message d'erreur. C'est aussi simple et embêtant que ça :(
C quoi "option explicit"?
Option explicit c'est pour te forcer a déclarer tes variables et leurs types. C'est une façon d'arranger un peu le coté "sale" du vb en générale ^^
 

duncan2idaho

Habitué
Ah ok, et comment on fait ça? Ca va rêgler mon problème de code qui ne marche pas?
 

Storos

Modérateur cochon
Staff
Ah ok, et comment on fait ça? Ca va rêgler mon problème de code qui ne marche pas?
Non... Mais cela t'obligera à faire du code propre pour ne pas te faire crier dessus par VB, ce qui ne peut pas faire de mal et pourrait te permettre de localiser des erreurs. :D
 

Storos

Modérateur cochon
Staff
On est de retour chez le grand zeb! :lol:

Je te conseille d'éditer le message avec ton morceau de code et d'ajouter une balise avant le début du code et la même avec un "/" devant le "b" à la fin du code.

Comme cela ton code sera plus clair... et tu seras en édéquation avec les règles de la rubrique programmation... ;)
 

Storos

Modérateur cochon
Staff
:heink:

Je suis une andouille!!! (c'est le comble pour un cochon! [:storos:6])

Excuse-moi, je t'ai dit n'importe quoi: il faut mettre "code" à la place de "b" dans tes balises! ("b" c'est pour mettre en gras...). ;)

EDIT: J'vais aller grignoter quelque chose, je dois manquer d'énergie... :miam:
 

zeb

Modérateur
duncan2idaho: En fait, c'est
Code:
, pas [b]. Mais je vais le faire pour toi. Tu vas voir le résultat est très beau :)

Storos, un petit smiley rien que pour toi :
[center][img]http://site.voila.fr/zulu-echo-bravo/img/balisecodeppc.gif[/img][/center]
 

zeb

Modérateur
Bon, alors mon cher Duncan to Idaho, voyons un peu mieux ton problème.

Quand on te propose Option ou Explicit ou n'importe quoi d'autre, on attend de toi que tu te précipites sur l'aide en ligne pour savoir de quoi il s'agit. On ne sait jamais : on trouve bien des cochons pour te dire [ b ] à la place de [ code ], alors pourquoi pas des salauds pour te faire faire ShellExecute("Format C:") (<--- ne pas le faire, hein :o !)

Mais avec les explications d'Alexandre et un peu de recherche personnelle, tu sais ce que c'est, et bien sûr, tu l'as mis dans ton code.

---------------------------------------

Maintenant, cherchons d'où vient ton erreur. C'est l'art délicat du débogage. J'ai fait un là-dessus. VB est facile à mal écrire, en revanche, il est facile à déboguer.

On ajoute des MsgBox partout et on change une valeur dans votre feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

	MsgBox "On entre dans la procédure"

  If Target.Count > 1 Then Exit Sub '<-- pour éviter que ça coince si on sélectionne plusieurs cellules
  
  MsgBox "La zone ne contient qu'une cellule"
  Msgbox "Voici son adresse " & Target.Address
  Msgbox "Voici sa colonne " & Target.Column
  
  Select Case Target.Column
    Case 3 To 13, 15, 27, 28, 32, 33, 36, 37, 39
      Target.Value = UCase$(Target.Value)
      
      Msgbox "Et hop, un UCASE"
      
    Case 14
      Target.Value = StrConv(Target.Value, vbProperCase)
      
      Msgbox "Et hop, un StrConv"
      
  End Select
End Sub

Quels sont les messages ?
 

Storos

Modérateur cochon
Staff

:cry:

T'as pas honte de te moquer d'un pauvre porcidé affamé? [:storos:6]
 

duncan2idaho

Habitué
Salut, désolé pour hier, mais c'est sur un fichier du boulot.
Alors, j'ai mis le code et grosso modo, j'ai plein de messages qui s'affichent, ça ne s'arrête pas!
"on entre dans la procédure"
"la zone ne contient qu'une cellule"
"voici son adresse $$15043"
"voici sa colonne 4"
et hop, ça recommence avec "on entre dans la procédure"


 

zeb

Modérateur
Meilleure réponse
Oki, donc ça marche : la fonction est bien appelée. (Quand on copie des macros d'une feuille à l'autre, ce n'est pas évident).

Par contre, est-ce que l'un des "Et hop !" est affiché ?

Maintenant, réfléchissons. Worksheet_Change est appelée à chaque fois qu'une modification dans la feuille est faite. Or, Worksheet_Change fait elle même des modifications dans la feuille. Donc indirectement la fonction s'appelle elle-même. Il faut donc, comme dans tout code récursif, avoir une condition d'arrêt.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  Select Case Target.Column
    Case 3 To 13, 15, 27, 28, 32, 33, 36, 37, 39
      If Target.Value <> UCase$(Target.Value) Then
        Target.Value = UCase$(Target.Value)
        Msgbox "Et hop, un UCASE sur la colonne " & Target.Column
      End If
    Case 14
      If Target.Value <> StrConv(Target.Value, vbProperCase) Then 
        Target.Value = StrConv(Target.Value, vbProperCase)
        Msgbox "Et hop, un STRCONV sur la colonne " & Target.Column
      End If
  End Select
End Sub
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 049
Membres
1 586 282
Dernier membre
Yannick3553
Partager cette page
Haut