VBA / Erreur 13 - Incompatibilité de type

Bonjour,

Je rencontre depuis plusieurs heures maintenant une erreur 13 sur mon code VBA :

Private Sub Worksheet_Change(ByVal Target As Range)
    'X pour chantier achevé
    If Not Intersect(Target, Range("L:L")) Is Nothing Then
        If Target.Value = "X" Then
        'copie de la ligne vers la feuille ARCHIVES
            Target.EntireRow.Copy Destination:=Sheets("ARCHIVES").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
            'Coupe coupe
            Target.EntireRow.Delete Shift:=xlUp
        End If
    End If
End Sub

La formule me permet de copier / couper une ligne de la feuille 1 en notant dans la colonne L un "X" puis de coller cette ligne vers la feuille "ARCHIVES".

La ligne qui est surligner par le débogage est la suivante :

 If Target.Value = "X" Then

Le plus étonnant dans tout ça, c'est que cela fonctionne. Ma ligne se copie bien à la suite des autres lignes archivées dans la feuille "ARCHIVES", mais l'erreur persiste systématiquement.

Pourriez vous m'aider à éclaircir ce sujet s'il vous plait ?

Cdlt,

Bonjour, je ne pense pas que vous pouvez tester la valeur X avec un Target sur une colonne.

En fonction de ce que vous souhaitez faire :

- Soit tester une cellule précise ( Exemple cellule actuellement active )

- Soit vous devez faire une boucle sur chaque cellule de la colonne L pour vérifier si l'une d'elle contiend un X.

Bonjour,

Merci pour votre réponse. J'opterais pour la formule boucle qui me permettrait de lire toutes les lignes de la colonne "L" si elle contient un X.

Je ne trouve d'équivalent qui pourrais me permettre de l'implanter dans ma formule... On parle ici bien de l'appelation "loop" et non d'un code qui me permettrait de faire une boucle n'est ce pas?

Une idée de pourquoi le VBA marche même si j'ai une erreur de type 13 ?

Merci d'avance,
Cdlt

Re bonjour ; non pas avec Loop mais avec l'utilisation de For et Next.

Par ailleurs comme vous supprimer des lignes il faut tester de bas en haut et pas du début à la fin.

exemple :

Sub Macro1()
    'X pour chantier achevé

'Début de Test en remontant de la dernière cellule non vide de la colonne L  à la valeur de i=1

For i = Range("L65536").End(xlUp).Row To 1 Step -1

If Range("L" & i).Value = "X" Then
Rows(i).Copy Destination:=Sheets("ARCHIVES").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Rows(i).Delete Shift:=xlUp
End If

Next
End Sub

Re,

Merci encore pour votre message.

Suite à l'implantation de votre code dans ma fiche, votre code fonctionne très bien. Seul petit changement, le fait de noter le "X" dans la colonne L est cette fois non automatique. J'ai intégré le code a un togglebutton...

Finalement, la manière est différente mais pas plus mal si l'on fait des erreurs... Cela nous permet de supprimer un X avant de faire une boulette merci...

Mais alors d'où vient l'automatisme du X avec mon ancien code ?

Cdlt,

Re bonjour, vous pouviez utilisez le code précédent comme ceci

Private Sub Worksheet_Change(ByVal Target As Range)
'déclenchement du code si l'une des valeurs de la colonne L change
If Not Intersect(Target, Range("L:L")) Is Nothing Then

'code donné......

end if 
end sub

Le Target sert à délimiter une Zone dans laquelle si un changement intervient une macro se lance.

Bonjour,

Effectivement et c'est ce que j'ai fait. Mais désormais je rencontre un problème... les lignes ne se copient plus dans la feuille "ARCHIVES" à la suite comme avant, vers le bas. Maintenant la ligne archivée écrase la première ligne de la feuille "ARCHIVES" et la remplace.

Private Sub Worksheet_Change(ByVal Target As Range)
    'X pour chantier achevé
    If Not Intersect(Target, Range("L:L")) Is Nothing Then
        For i = Range("L65536").End(xlUp).Row To 1 Step -1

        If Range("L" & i).Value = "X" Then
        Rows(i).Copy Destination:=Sheets("3").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
        Rows(i).Delete Shift:=xlUp
    End If
    Next
End If
End Sub

Hyper étonnant.

Ce serait plus facile avec un fichier exemple pour voir.

surtout si vous remplacez les noms de feuilles par des numéros de feuilles.

Rows(i).Copy Destination:=Sheets(""ARCHIVES"").Range("A" & Rows.Count).End(xlUp) +1

Bonjour,

La formule que vous m'avez transmise marche parfaitement bien dans la fonction "couper / coller"...

Je rencontre maintenant un seul problème : le fait que les lignes ne se suivent pas mais se remplacent les unes aux autres...

Voici le code utilisé :

Private Sub CommandButton1_Click()
For i = Range("L65536").End(xlUp).Row To 1 Step -1

If Range("L" & i).Value = "X" Then
Rows(i).Copy Destination:=Sheets("ARCHIVES").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Rows(i).Delete Shift:=xlUp
End If

Next
End Sub

Merci d'avance pour votre aide,

Cdlt

PS: j'ai remplacé le numéro de feuille par la feuille ARCHIVES. Le numéro avait été mis pour des tests sans que je n'ai pensé à le changer avant de l'envoyer sur le forum :)

Bonjour,

Toujours pas de solution pour moi...

Dans l'attente,

Merci d'avance

Bonjour, comme je n'ai pas ce problème de décalage ; j'ai indiqué ce serait plus facile avec un fichier exemple.

( sans informations confidentielles )

Rechercher des sujets similaires à "vba erreur incompatibilite type"