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
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 SubQuelques 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 SubAttention 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
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 SubAmicalement
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