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-

Rechercher des sujets similaires à "vba traduction"