RESOLU conflit dans un code

  • Initiateur de la discussion Initiateur de la discussion kinel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

kinel

XLDnaute Occasionnel
Bonjour à tous

j'utilise le code suivant pour automatiser la majuscule sur une feuille et ça fonctionne très bien

Private Sub Worksheet_Change(ByVal Target As Range)
Dim flag As Boolean
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C4:M33")) Is Nothing Then
Application.EnableEvents = False
ActiveSheet.Unprotect
Range("O" & Target.Row).Value = Date
Application.EnableEvents = True
End If
ActiveSheet.Unprotect
Rows.AutoFit
If Not Intersect(Target, Range("c4:c33")) Is Nothing Then
Application.EnableEvents = False
flag = True
Target.Value = Evaluate("PROPER(""" + Target.Value + """)")
End If
If Not Intersect(Target, Range("c4:c33")) Is Nothing Then
Application.EnableEvents = False
flag = True
Target.Value = UCase(Target.Value)
End If
If Not Intersect(Target, Range("D4😀33")) Is Nothing Then
Application.EnableEvents = False
Target.Value = StrConv(Target, vbProperCase)
End If
Application.EnableEvents = True
ActiveSheet.Protect
End Sub


je voudrais y ajouter le code suivant pour automatiser l'effacement de la ligne si la 3ieme cellule est effacée

If Target.Column <> 3 Or Target.Count > 1 Or (Target.Row < 10 Or Target.Row > 32) Then Exit Sub
If IsEmpty(Target) Then
Application.EnableEvents = False
Target.Resize(, 4).ClearContents
Target.Resize(, 5).ClearContents
Target.Resize(, 6).ClearContents
Target.Resize(, 7).ClearContents
Target.Resize(, 8).ClearContents
Target.Resize(, 9).ClearContents
Target.Resize(, 10).ClearContents
Target.Resize(, 11).ClearContents
Target.Resize(, 12).ClearContents
Target.Resize(, 13).ClearContents
Application.EnableEvents = True
End If


séparément ça fonctionne aussi très bien mais quand je place les deux ensemble rien ne va plus
merci de m'aider à intégrer proprement ce complément de code

Kinel
 
Dernière édition:
conflit dans un code

bonjour Yaloo

effectivement un peu fouillis je le reconnais
d'autant plus qu'en mettant un peu d'ordre j'ai maintenant un code qui fonctionne à merveille
je le joins ci dessous à toutes fins utiles:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim flag As Boolean
ActiveSheet.Unprotect
' ajoute la date de modification d'une ligne sur la colonne O
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C4:M33")) Is Nothing Then
Application.EnableEvents = False
Range("O" & Target.Row).Value = Date
Application.EnableEvents = True
ActiveSheet.Protect
End If
'met la majuscule sur les celulles c4 à c33
ActiveSheet.Unprotect
Rows.AutoFit
If Not Intersect(Target, Range("c4:c33")) Is Nothing Then
Application.EnableEvents = False
flag = True
Target.Value = Evaluate("PROPER(""" + Target.Value + """)")
Application.EnableEvents = True
ActiveSheet.Protect
End If

'met la première lettre en majuscule sur les celulles D4 à D33
If Not Intersect(Target, Range("D4😀33")) Is Nothing Then
ActiveSheet.Unprotect
Application.EnableEvents = False
Target.Value = StrConv(Target, vbProperCase)
Application.EnableEvents = True
ActiveSheet.Protect
End If
'efface les celulles de la 4ième à la 11ième si la 3ième est vide de la 4ième à la 33ième ligne
If Target.Column <> 3 Or Target.Count > 1 Or (Target.Row < 4 Or Target.Row > 33) Then Exit Sub
If IsEmpty(Target) Then
ActiveSheet.Unprotect
Application.EnableEvents = False
Target.Resize(, 4).ClearContents
Target.Resize(, 5).ClearContents
Target.Resize(, 6).ClearContents
Target.Resize(, 7).ClearContents
Target.Resize(, 8).ClearContents
Target.Resize(, 9).ClearContents
Target.Resize(, 10).ClearContents
Target.Resize(, 11).ClearContents
Application.EnableEvents = True
ActiveSheet.Protect
End If

End Sub
 
Dernière édition:
Re : RESOLU conflit dans un code

Bonjour kinel,

Pour mettre en nom propre, pour la compréhension, il serait plus judicieux d'utiliser une seule et même syntaxe.

Par exemple:
Target.Value = StrConv(Target, vbProperCase)

De plus, tu mets
Application.EnableEvents = False
et
Application.EnableEvents = True
à chaque fois, si tu le mets en début puis en fin de macro, c'est suffisant.

Et enfin :
If Target.Column <> 3 Or Target.Count > 1 Or (Target.Row < 4 Or Target.Row > 33) Then Exit Sub

Target.Count > 1
C'est déjà testé dans ta 4 ème ligne

Martial
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
506
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
587
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour