Erreur sur Range d'une séléction conditionnelle
Bonjour à tous,
Je solicite à nouveau votre aide car je suis à court d'idée pour règler mon problème.
J'ai une macro qui fonctionne parfaitement dans un premier fichier excel, mais qui me renvoi un message d'erreur quand je l'applique à un autre fichier. Pour être plus claire ma macro :
1) parcours la colonne L d'une feuille excel et repère toutes les cellule où on trouve un "/"
2) copie les lignes associées à ces cellules dans une autre feuille
3) fait un second trie dans cette seconde feuille en séléctionnant les cellules comprenant "-JOCUSER"
4) supprime les lignes associée toujours dans cette seconde feuille.
J'ai utilisé cette macro sur un permier fichier elle fonctionne très bien. Je l'ai ensuite copier/coller dan sun autre fichier excel pour l'utiliser sur une autre plage de donnée (exactement du même format), et là, ma macro fonctionne jusqu'à l'étape 3, puis me donne une erreur "1004 : erreur définie par l'application ou par l'objet".
Voici la macro (en rouge là ou l'erreur m'apparait, c'est sur le Range plus exactement) :
Sub Factures()
Dim i As Long, j As Long, k As Long, slct As Variant, l As Integer, Cpt As Integer, CptSh As Integer
' je commence par créer une nouvelle feuille si elle n'existe pas
Cpt = 0
CptSh = Sheets.Count
For l = 1 To CptSh
If Sheets(l).Name <> "Facture" Then Cpt = Cpt + 1 Else Exit For
Next l
If Cpt = CptSh Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Facture"
End If
' je récupère toutes les lignes qui m'intéressent
Sheets("Nosica").Select
j = 1
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(i, 12), "/") <> 0 Then
Rows(i).Select
Selection.Copy
Sheets("Facture").Select
Cells(j, 1).Select
ActiveSheet.Paste
Sheets("Nosica").Select
j = j + 1
End If
Next i
' je fais un dernier trie dans ma seconde feuille qui vient d'être créer
Sheets("Facture").Select
For k = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(k, 12), "-JOCUSER,") <> 0 Then
slct = slct & k & ":" & k & ","
End If
Next k
slct = Left(slct, Len(slct) - 1)
Sheets("Facture").Range(slct).Select
Selection.Delete
End Sub
Peut être que quelqu'un a déjà rencontré le même problème, je cherche depuis un moment je n'arrive pas à expliquer mon erreur.
Merci d'avance pour votre aide
Bonjour,
A tester
Sheets("Facture").Select
slct = """"
For k = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(k, 12), "-JOCUSER,") <> 0 Then
slct = slct & k & ":" & k & ","
End If
Next k
slct = Left(slct, Len(slct) - 1) & """"
Sheets("Facture").Range(slct).Select
Selection.DeleteJean-Eric merci pour ta réponse,
Malheuresement ça ne fonctionne pas !
Mais je vais essayer de partir de ça
Jean-Eric merci pour ta réponse,
Malheuresement ça ne fonctionne pas !
Mais je vais essayer de partir de ça
Bonjour,
Salut Jean-Eric
Il va de soi que sans fichier ... il faut faire travailler l'imagination ...
Pour commencer, donc à vérifier avant tout ce qui concerne slct ...
1. Dim slct As String
2. S'assurer qu'en aucun cas ce string peut être vide ...
Bonjour,
Quelque chose m'échappe...
Pourquoi ne pas tester également la présence "-JOCUSER," avant de copier la ligne ?
Plus rien à supprimer ensuite.
eric
Bonjour Eric et James007,
Déjà désolé de ne pas avoir fourni le fichier avec la macro, j'y ai pensé mais il contenait des informations internes à mon entreprise que je ne pouvais pas partager.
J'ai réglé mon problème en suivant les conseils d'eriiic, ça simplifie par la même occasion mon code.
Merci à tous pour votre aide !
PS : voici le code final
Sub Factures()
Dim i As Long, j As Long, k As Long, slct As Variant, l As Integer, Cpt As Integer, CptSh As Integer
Cpt = 0
CptSh = Sheets.Count
For l = 1 To CptSh
If Sheets(l).Name <> "Facture" Then Cpt = Cpt + 1 Else Exit For
Next l
If Cpt = CptSh Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Facture"
End If
Sheets("Nosica").Select
j = 1
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(i, 12), "/") <> 0 Then
If Not Cells(i, 12) Like "*JOCUSER*" Then
Rows(i).Select
Selection.Copy
Sheets("Facture").Select
Cells(j, 1).Select
ActiveSheet.Paste
Sheets("Nosica").Select
j = j + 1
End If
End If
Next i
End Sub