Macro à corriger- Erreur d’execution type 13

Bonsoir à tout le forum

J'ai des macros ( couper/coller ligne si x) ( minuscule/majuscule pour des colonnes) qui fonctionnait bien auparavant se met à buguer depuis qq temps.

si je fais des recopies de plusieurs cellules sur feuil 1,2,3: Erreur d’execution type 13 - incompatibilite pour la ligne : If Target.Column = 12 And UCase(Target) = "X" Then.

de même,si je fais des copier-coller / effacer : Erreur d’execution type 13 ......incompatibilite pour la 1ere ligne :Target = UCase(Target)

.................................................. ..........................................

Private Sub Worksheet_Change(ByVal Target As Range)

Dim lig%, nblig%, i As Byte

ActiveSheet.Unprotect

If Not Intersect(Target, Range("B5:B500")) Is Nothing Then Target = UCase(Target) <<<<

If Not Intersect(Target, Range("C5:C500")) Is Nothing Then Target = LCase(Target)

If Not Intersect(Target, Range("D5500")) Is Nothing Then Target = UCase(Target)

If Target.Column = 12 And UCase(Target) = "X" Then <<<<<

Ce fichier comporte 6 feuilles de même nature et format.

je profite pour une autre question : . Comment accéder aux filtres sans enlever la protection à chaque fois (sur excel 97) - je m'en sert aussi sur excel 2003 = ok

Merci de votre aide

29suivi-contrats.zip (37.02 Ko)

Bonjour,

Donne un exemple sur ce que tu fais exactement que je puisse le reproduire.

Sinon une idée en ajoutant cette ligne au début de ton code -->

If Target.Count > 1 Then Exit Sub

Quelques commentaires :

Comme tes macros sont identiques, transforme là en une seule comme ci-dessous et place là dans thisworkbook au lieu de les mettre dans chaque feuille.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lig As Integer, nblig As Integer
Dim As Byte
If Target.Count > 1 Then Exit Sub
ActiveSheet.Unprotect
If Not Intersect(Target, Range("B5:B500")) Is Nothing Then Target = UCase(Target)
If Not Intersect(Target, Range("C5:C500")) Is Nothing Then Target = LCase(Target)
If Not Intersect(Target, Range("D5:D500")) Is Nothing Then Target = UCase(Target)
If Target.Column = 12 And UCase(Target) = "X" Then
    lig = Target.Row
    With Sheets("Archives")
        nblig = .Range("B65535").End(xlUp).Row + 1
        For i = 2 To 14
            .Cells(nblig, i).Value = Cells(lig, i).Value
        Next i
        .Cells(nblig, 1) = Now 'je suppose !
    End With
    Application.EnableEvents = False
    Rows(lig).EntireRow.Delete
    Application.EnableEvents = True
End If
ActiveSheet.Protect
End Sub

Attention aussi à l'instruction Enableevents qui peut te faire perdre l'exécution de toutes macros dans excel si tu avais un plantage en cours d'exécution de code.

A te relire

Bonsoir au Forum,

Bonsoir Dan,

Merci de ton aide

Alors, mon fichier comporte plusieurs feuilles avec des données : noms , dates etc....

des colonnes avec format (macro) majuscule/minuscule :

If Not Intersect(Target, Range("B5:B500")) Is Nothing Then Target = UCase(Target)

If Not Intersect(Target, Range("C5:C500")) Is Nothing Then Target = LCase(Target)

If Not Intersect(Target, Range("D5:D500")) Is Nothing Then Target = UCase(Target)

>> une macro qui fait couper/coller sur feuill Archives quand il y a x en colonne L.

If Target.Column = 12 And UCase(Target) = "X" Then

Suite à ton commentaire, j'ai mis la macro ( je précise que je n'y connais rien en macro) dans le thisworbook et effacer le reste...

j'ai dù purement effacer " Dim As Byte " pour que la macro maj/minuscule fonctionne. Est-ce indispensable ?

pour le couper/coller : " erreur d'éxec. 1004 - la méthode intersect d'objet global a échoué"

Par contre, les problèmes d'origines ont disparus .

Bonne soirée à tous

Cafrine

21suivi-contrats.zip (36.86 Ko)

Re,

Attention que lorsque tu copies des données vers ta feuille Archives, il faut que cette dernière ne soit pas protégée.

Pour le Dim que tu as enlevé, c'est moi qui avait oublié de mettre le i. J'ai été trop vite ... déso

Pour le code, vu que tu le déplaces bien vers thisworbook, essaie plutot celui-ci

Dim ok As Boolean
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lig As Integer, nblig As Integer
Dim i As Byte
If Target.Count > 1 Then Exit Sub
If ok = True Then Exit Sub
ActiveSheet.Unprotect
If Not Intersect(Target, Range("B5:B500")) Is Nothing Then Target = UCase(Target)
If Not Intersect(Target, Range("C5:C500")) Is Nothing Then Target = LCase(Target)
If Not Intersect(Target, Range("D5:D500")) Is Nothing Then Target = UCase(Target)
If Target.Column = 12 And UCase(Target) = "X" Then
    lig = Target.Row
    With Sheets("Archives")
        ok = True
        nblig = .Range("B65535").End(xlUp).Row + 1
        For i = 2 To 14
            .Cells(nblig, i).Value = Cells(lig, i).Value
        Next i
        .Cells(nblig, 1) = Now 'je suppose !
   End With

    Rows(lig).EntireRow.Delete
    ok = False
End If
ActiveSheet.Protect
End Sub

Amicalement

Bonsoir le forum,

Dan, c'est super ; çà (re) fonctionne très bien.

je suis vraiment contente..

Un grand merci et très bonne soirée à toi

Cafrine

Rechercher des sujets similaires à "macro corriger erreur execution type"