Appliquer une formule comme "format" ??

Bonjour à tous !!,

Je connais les formules "MAJUSCULE(A:A)" et "=ARRONDI.SUP(B:B*4;0)/4".

Je cherche à appliquer une formule en tant que format (je ne sais pas si c'est possible mais c'est le seul "chemin" que je vois pour résoudre mon problème).

Ce que je souhaite obtenir, c'est que lors de la saisie manuelle (ou même un copié-collé), les données saisies dans la colonne A soient automatiquement converties en majuscules, et que les chiffres de la colonne B soient automatiquement arrondis au supérieur à 0,25 prêt...

Avez-vous une idée pour y parvenir ?

J'ai bien pensé à une macro qui copie mon tableau sur un nouvel onglet en appliquant les formules, puis recopie les valeurs du nouvel onglet à l'emplacement de départ, avant de supprimer le 2ème onglet créé précédemment, mais il doit y avoir plus simple, non ??? Et puis, ce n'est pas automatique dès la saisie....

Merci de l'attention que vous porterez à mon soucis....

Bonsoir,

Essaie avec ce code :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Macro Dan pour Kiriko le 21/10/2010
If Not Intersect(Target, Columns("A:A")) Is Nothing Then
Target = UCase(Target)
End If
If Not Intersect(Target, Columns("B:B")) Is Nothing Then
Target = WorksheetFunction.RoundUp(Target, 1)
End If
End Sub

Le code est à placer dans la feuille où tu veux faire cette action.

Pour le placer, clique droite sur l'onglet de la feuille puis choisis "visualiser le code". Colle le code dans la fenêtre que tu vois.

Pour l'arrondi, vois si c'est que tu attends. Si non, donne quelques exemple de ce que tu veux.

Amicalement

Bonsoir Dan

Pour l'arrondi au 0,25 sup

Target = Application.Ceiling(Target, 0.25)

Cordialement

Bonsoir Dan, bonsoir Amadéus !!!

Merci bien !!

Le code semble bien s'exécuter mais excel crash immédiatement après (dès que je saisi des données dans une case de la colonne A ou B, la "correction" se fait mais crash immédiat). J'ai essayé en fermant tout et redémarrant l'ordi, pareil... Un coup de CCleaner, pareil après...

Pensez-vous que cela puisse être dû au code ou à autre chose ?? j'ai essayé de faire tourner d'autres macros, pas de soucis...

Dans le rapport d'erreur : "APPCRASH"

J' ai excel 2007 sur windows 7...

De plus, est-il possible d'exclure la ligne 1 des modifs (Titres de tableau)... ??

Bonjoue

Essaie en rajoutant les instructions EnableEvents

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Columns("A:A")) Is Nothing Then
Application.EnableEvents = False
Target = UCase(Target)
End If
If Not Intersect(Target, Columns("B:B")) Is Nothing Then
Target = Application.Ceiling(Target, 0.25)
End If
Application.EnableEvents = True
End Sub

Tu pourrais aussi limiter le champ d'action de la macro en définissant le champ

If Not Application.Intersect(Target, Range("A2:A1000")) Is Nothing Then 

Cordialement

Bonjour le fil.

Merci bien, chez moi plus de problème, visiblement ses Windows Seven qui est embêtant car mon deuxième PC sous XP et toujours avec Excel 2007 fonctionne parfaitement sans aucun rajout de code.

Merci.

Mille Merci !!!

C'est impeccable...

J'essayerais de décortiquer ça pour comprendre, je n'avais jamais vu ces codes (débutant et beaucoup avec l'enregistreur de macro)....

Merci encore !!!!

P.S. :y-a-t'il une méthode pour que les minuscules avec accents se transforment en majuscules sans accents ??

-- Sam Oct 23, 2010 2:31 am --

Merci encore à tous !!

J'ai bidouillé une modif pour les accents, mais si vous avez plus simple, ça m'intéresse :

 Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Row = 1 Then Exit Sub
    If Not Intersect(Target, Columns("A:A")) Is Nothing Then
   codeA = "ÉÈÊËÔéèêëàçùôûïî"
   codeB = "EEEEOeeeeacuouii"
   temp = Target
    For i = 1 To Len(temp)
    p = InStr(codeA, Mid(temp, i, 1))
    If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
   Next
    Application.EnableEvents = False
    Target = UCase(temp)
    Target = UCase(Target)
    End If
    Application.EnableEvents = True
    If Not Intersect(Target, Columns("B:B")) Is Nothing Then
    Application.EnableEvents = False
    Target = Application.Ceiling(Target, 0.25)
    End If
    Application.EnableEvents = True
    End Sub 

Edit :

Dernier point : Est-il possible d'appliquer ceci à l'ensemble de la feuille (sauf 1ère ligne), de manière à ce que qu'elle que soit la cellule de saisie, elle se transforme en majuscule sans accent ou en arrondi à 0.25 prêt supérieur en fonction de ce qui est saisi sans générer d'erreur ??

re,

La base du code que tu as est bonne. On peut aussi néanmoins faire ceci :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim codeA As String, codeB As String, temp As String
Dim i As Byte, p As Byte
If Target.Row = 1 Then Exit Sub
If Not Intersect(Target, Columns("A:A")) Is Nothing Then
codeA = "ÉÈÊËÔéèêëàçùôûïî"
codeB = "EEEEOeeeeacuouii"
temp = Target
For i = 1 To Len(Target)
p = InStr(codeA, Mid(Target, i, 1))
If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
Next
Application.EnableEvents = False
Target = UCase(temp)
End If
If Not Intersect(Target, Columns("B:B")) Is Nothing Then
Application.EnableEvents = False
Target = Application.Ceiling(Target, 0.25)
End If
Application.EnableEvents = True
End Sub

J'ai ajouté les déclarations de variable.

Une remarque, lorsque tu poste un code mets avec les balises de code en cliquant sur l'option "Code" dans la barre d'outils disponible au dessus de l'encart réservé à ton message.

Si ok n'oublie pas de cliquer sur le v vert.

Amicalement

Merci Dan,

cela ne fonctionne pas mais en relisant ton code, je pense juste que n'a pas eut le temps de lire l'édit de mon dernier post :

"Edit :

Dernier point : Est-il possible d'appliquer ceci à l'ensemble de la feuille (sauf 1ère ligne), de manière à ce que qu'elle que soit la cellule de saisie, elle se transforme en majuscule sans accent ou en arrondi à 0.25 prêt supérieur en fonction de ce qui est saisi sans générer d'erreur ??".

Et désolé pour l'absence de balises de code, j'ai modifié....

Re,

Effectivement je n'avais pas vu ton Edit. Heureusement le code ne changera pas de trop...

Essaie comme ceci :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim codeA As String, codeB As String, temp As String
Dim i As Byte, p As Byte
If Target.Row = 1 Then Exit Sub
If Not IsNumeric(Target) Then
codeA = "ÉÈÊËÔéèêëàçùôûïî"
codeB = "EEEEOeeeeacuouii"
temp = Target
For i = 1 To Len(Target)
p = InStr(codeA, Mid(Target, i, 1))
If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
Next
Application.EnableEvents = False
Target = UCase(temp)
Else:
Application.EnableEvents = False
Target = Application.Ceiling(Target, 0.25)
End If
Application.EnableEvents = True
End Sub

Amicalement

C'est plus que parfait !! Merci beaucoup, ça va énormément me simplifier la vie !!!

Question subsidiaire qui me servira plus tard:

On a vu comment exclure une ligne donnée avec :

If Target.Row = 1 Then Exit Sub

Quelle est le code pour exclure une colonne donnée ? (on va dire D pour l'exemple) ??

Avec toute ma reconnaissance...

edit :

Je crois que j'ai trouvé : Pour exclure D :

If Target.Column = 4 Then Exit Sub

Encore Merci !!!

Edit :

J'avais également posté cette requête sur un autre forum, sans vous ni les prévenir, et Dan m'a fait remarqué que cela ne se faisait pas.

Je n'en avais pas conscience, et loin de moi l'idée de vouloir manqué de respect à qui que ce soit... Je vous présente donc mes excuses pour cette pratique, à laquelle on ne me reprendra plus...

Cordialement, avec mes remerciements pour toute l'aide apportée...

Kiriko.

Bonjour,

Je reviens sur ce post.

Si je veux simplement que toute écriture de lettres en minuscules dans une cellule se transforment en majuscule, quel code insérer ?

Merci pour votre aide !

Bonjour,

Range("A1") = UCase(Range("A1"))

?

oyobrans, merci pour ta réponse.

J'ai sélectionné le code et l’ai copié dans "visualiser le code" de l'onglet de mon fichier. J'ai alors fermé Visual basic.

Cependant, le fait de taper en minuscules un texte dans une cellule ne le met toujours pas en majuscules.

Ai-je fait une erreur de manipulation ?

En tous cas, merci pour ton aide !

Bonjour,

Il faut placer le code dans la feuille en question, pour l’événement Change :

Private Sub Worksheet_Change(ByVal Target As Range)
    'S'il y a plus d'une cellule on quitte
    If Target.Count > 1 Then Exit Sub
    'Si la cellule modifiée appartient à la plage A1:A10
    If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
        'On met le texte en majuscules
        Target.Value = UCase(Target.Value)
    End If
End Sub
10maj.xlsm (14.00 Ko)

OK, cela fonctionne très bien !

Un grand merci, et bonne fin de journée !

Rechercher des sujets similaires à "appliquer formule comme format"