OVH Cloud OVH Cloud

Worksheet_Change

8 réponses
Avatar
RIRI
Bonjour,

J'ai la macro suivante :

Private sub Worksheet_Change (ByVal Target As range)

Application.EnableEvents = False

If Target.Column = 2 Then
Target = Ucase (Target)
End If
If Target.Column = 7 Then
Target = Ucase (Target)
End If

Application.EnableEvents = True
End Sub


Quand je fait une recopie de cellule je créer un bog dans ma macro. Que
puis-je faire pour éviter cela???

Mille Merci

8 réponses

Avatar
michdenis
Bonjour Riri,

Essaie ceci :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rg As Range
Application.EnableEvents = False

If Target.Column = 2 Then
Set Rg = Intersect(Target, Columns(2))
If Not Rg Is Nothing Then
For Each c In Rg
If Right(c, 1) <> "=" And Right(c, 1) <> "+" Then
If c.Value <> "" Then
c.Value = UCase(c)
End If
End If
Next
End If
End If

If Target.Column = 7 Then
Set Rg = Intersect(Target, Columns(7))
If Not Rg Is Nothing Then
For Each c In Rg
If Right(c, 1) <> "=" And Right(c, 1) <> "+" Then
If c <> "" Then
c.Value = UCase(c)
End If
End If
Next
End If
End If
Application.EnableEvents = True
End Sub


Salutations!



Salutations!




"RIRI" a écrit dans le message de news:BB2CADC9.6627%
Bonjour,

J'ai la macro suivante :

Private sub Worksheet_Change (ByVal Target As range)

Application.EnableEvents = False

If Target.Column = 2 Then
Target = Ucase (Target)
End If
If Target.Column = 7 Then
Target = Ucase (Target)
End If

Application.EnableEvents = True
End Sub


Quand je fait une recopie de cellule je créer un bog dans ma macro. Que
puis-je faire pour éviter cela???

Mille Merci
Avatar
RIRI
Merci beaucoup, en voyant ta macro je comprends pourquoi la mienne était
nulle
Avatar
michdenis
Bonjour Riri,

Voici la procédure corrigée d'une inexactitude !


Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rg As Range
Application.EnableEvents = False

If Target.Column = 2 Then
Set Rg = Intersect(Target, Columns(2))
If Not Rg Is Nothing Then
For Each c In Rg
If Not IsError(c) Then
If Left(c.Formula, 1) <> "=" _
And Left(c.Formula, 1) <> "+" Then
c.Value = UCase(c)
End If
End If
Next
End If
End If

If Target.Column = 7 Then
Set Rg = Intersect(Target, Columns(7))
If Not Rg Is Nothing Then
For Each c In Rg
If Not IsError(c) Then
If Left(c.Formula, 1) <> "=" _
And Left(c.Formula, 1) <> "+" Then
c.Value = UCase(c)
End If
End If
Next
End If
End If
Application.EnableEvents = True
End Sub


Salutations!
Avatar
michdenis
Bonjour Riri,

Prend soin de copier la nouvelle procédure pour éviter les surprises !!!

Salutations!


"RIRI" a écrit dans le message de news:BB2CB4BC.66EE%
Merci beaucoup, en voyant ta macro je comprends pourquoi la mienne était
nulle
Avatar
AV
Hé Denis, tu dois être sacrément dangereux quand tu circules !
Droite ou gauche ?
;-)
J'annule presto mon séjour au Canada !
AV
Avatar
RIRI
Merci beaucoup, je prends note de la modif.

Serait-ce de l'abus si je te demande de m'expliquer ta procédure?
Avatar
michdenis
Bonjour AV,

Au volant, non ! Mais comme co-pilote ! C'est l'enfer ! Pour le pilote !

;-)))

Je suis un faux droitier que l'on a obligé à écrire de la droite !
mais gaucher dans les activité sportives ! Donc un peu mélangé !!!


Salutations!



"AV" a écrit dans le message de news:%
Hé Denis, tu dois être sacrément dangereux quand tu circules !
Droite ou gauche ?
;-)
J'annule presto mon séjour au Canada !
AV
Avatar
michdenis
Bonjour Riri,

Tu as bien raison, la procédure était longue inutilement !!!

Voici une version écourtée et plus complète :

'--------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rg As Range
Application.EnableEvents = False
Set Rg = Intersect(Target, Union(Columns(2), Columns(7)))
If Not Rg Is Nothing Then
For Each c In Rg
If Not IsError(c) Then
If Left(c.Formula, 1) <> "=" _
And Left(c.Formula, 1) <> "+" Then
c.Value = UCase(c)
End If
End If
Next
End If
Application.EnableEvents = True
Set Rg = Nothing
End Sub
'--------------------------------------



Même procédure avec note explicative :

Il faut savoir que le "Target" de la procédure représente
la cellule active ou l'ensemble des cellules sélectionnées
par un usager.

'-------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

'Déclaration d'un objet "Range"
Dim Rg As Range

'Cette ligne désactive les procédures événementielles
Application.EnableEvents = False

'Détermine la plage de cellules qui est touché par
'la procédure. En fait, c'est l'intersection entre
'une plage sélectionnée sur la feuille avec les
'colonnes 2 et 7. Toutes les cellules qui sont communes
'à la sélection (ou une cellule) fait par l'usager et
'à la colonne 2 ou 7 , se retrouvent dans la variable
'Range "Rg"
Set Rg = Intersect(Target, Union(Columns(2), Columns(7)))

'Si il y a au moins une cellule dans la variable Rg
If Not Rg Is Nothing Then
'Pour toutes les cellules contenues dans Rg
For Each c In Rg
'Si tu écris dans une cellule de Rg une
'formule, et que le nom de la fonction
'est erronée ...cela évite un plantage
'La cellule affiche #NOM? , on ne peut pas
'donc la mettre en majuscule !!!
If Not IsError(c) Then
'Si tu as écris une formule dans une des cellules
'de Rg, Tu ne veux pas modifier ce que la fonction
'ou formule doit renvoyer ! Une formule peut aussi
'renvoyé du texte.
If Left(c.Formula, 1) <> "=" _
And Left(c.Formula, 1) <> "+" Then
'La mise en majuscule simplement du contenu
'de la cellule.
c.Value = UCase(c)
End If
End If
Next
End If
'Réactive les procédures événementielles
Application.EnableEvents = True

End Sub
'-------------------------------------------------


Salutations!




"RIRI" a écrit dans le message de news:BB2CBA39.687F%
Merci beaucoup, je prends note de la modif.

Serait-ce de l'abus si je te demande de m'expliquer ta procédure?