VBA - Traduction VBA
Bonjour,
J'ai un code VBA (que je n'ai pas réalisé personnellement) qui fonctionne très bien sur un fichier mais quand je copie/colle la macro sur un autre fichier, ça ne fonctionne pas.
La macro est inscrite dans le code de la feuille. Elle s'applique donc dès que j’écris dans une cellule.
Elle a pour but de Colorier soit en Bleu ou soit en Orange une plage de cellule, suivant que le mois soit pair ou impair.
Elle met également en majuscule tout les données inscrite sur trois colonnes différentes.
Je ne comprend vraiment pas pourquoi elle ne fonctionne pas dans l'autre fichier car ils sont semblable.
Si vous pouvez m'éclairer sur les raisons possibles ?
Ou alors me traduire les formules présente dans le code, que j'ai dû mal à comprendre.
Dim NumVals As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim oRange As Range
Dim NewCount As Long
Dim i As Long
Dim j As Long
If Target.Row < 3 Then Exit Sub
If Intersect(Target, Range("B3:H500")) Is Nothing Then Exit Sub
On Error GoTo Lig1
i = Target.Row
j = Target.Column
NewCount = Application.WorksheetFunction.CountA(Target)
If NewCount = 0 And NumVals > 0 Then
Range(Cells(i, "B"), Cells(i, "H")).Interior.Pattern = xlNone
Exit Sub
End If
Application.EnableEvents = False
Select Case j
Case 2
Set oRange = ActiveSheet.Range(ActiveSheet.Cells(Target.Row, Target.Column), ActiveSheet.Cells(Target.Row, 8))
If IsDate(Target.Value) Then
ColorLigne oRange
Else
oRange.Interior.Pattern = xlNone
End If
Case 3, 4, 8
Target = UCase(Target)
End Select
Lig1:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
NumVals = Application.WorksheetFunction.CountA(Target)
End Sub
Cordialement,
Antho-
Bonjour,
Des choses inutiles, d'autres qui peuvent être écrites plus simplement, mais rien qui empêche de fonctionner...
Il faudrait donc voir le fichier où ça ne fonctionne pas pour en voir la raison.
Cordialement.
Bonjour,
J'ai testé le code et apparemment il manque un module ou module de classe , car le code cherche à appeler la procédure :ColorLigne oRange .
J'ai testé le code et apparemment il manque un module ou module de classe , car le code cherche à appeler la procédure :ColorLigne oRange .
Evidemment, si on appelle une procédure dans une autre, on doit supposer que la procédure appelée existe dans un module du classeur !
Si elle faisait défaut, il se produirait une erreur d'exécution, ce qu'Antho- ne signale pas, il indique que cela ne fonctionne pas, c'est à dire qu'il ne se passe rien alors qu'il devrait se passer quelque chose...
Cordialement.
Bonjour,
Tout d'abord merci pour vos retours,
En effet la macro ColorLigne est présente dans un autre module, pas de problème par rapport à ça.
Je pense avoir résolu mon problème qui venait d'une autre macro.
Elle permet d'insérer une ligne, j'ai remarqué en comparant les deux fichiers, ça au début :
Application.EnableEvents = False
Application.ScreenUpdating = False
Mais Il manquait ça à la fin :
Application.EnableEvents = True
Application.ScreenUpdating = True
Du coup ça à l'air de fonctionner.
Mais question, à quoi sert cette ligne de code exactement ? (Je pense comprendre le principe)
Cordialement,
Antho-
Re,
Application.ScreenUpdating = True
Cette ligne est tout à fait inutile, Excel retablit automatiquement la propriété à True en fin de macro lorsque tu l'as définit à False en cours de macro (ce qui est utile pour éviter de voir s'agiter l'écran durant l'exécution, et surtout permettre une exécution plus rapide...)
(Elle ne servirait donc que si la macro se poursuivait et que tu aies voulu mettre à jour l'affichage avant de poursuivre.)
Par contre :
Application.EnableEvents = True
celle-ci rétablit le fonctionnement normal des évènements et est tout à fait indispensable, car cela ne se remet pas automatiquement à True.
Elle figure bien en fin de procédure que tu as citée, mais si une autre procédure les interrompt sans les rétablir ensuite, ta procédure ne pouvait plus se déclencher...
(On interrompt les réactions aux évènements lorsqu'on doit intervenir sur la zone qui l'a déclenché, pour ne pas risquer de le relancer en boucle de façon infinie.)
Cordialement.
Bonjour,
D'accord, merci beaucoup !
Cordialement,
Antho-