comment eviter une erreur 1004 (copie d'une selection vide) ?

g.milano

XLDnaute Junior
Bonjour,


Dans une macro, je trie une liste d'article (des vetements) selon des criteres pre-defini, puis copie le resultat dans une autre feuille.

Mais selon les semaines, il se trouve que certains criteres ne sont pas presents (ex: pas de cravattes).

Bilan : 1004 error.

J'ai cherche sur le net et le forum (selection vide test vba), mais je n'ai pas trouver mon bonheur. Je reviens donc vous demander votre aide.

Ci-dessous la partie du code incriminee (la ligne qui bloque est indique d'un *) :

Code:
'declarations
    Dim i, k, l, t, tana, retsu, iro, bangou, shouhin, insatsu, insatsuh, insatsum, crit, critnb As Long
    Dim shouhinmei, hinbanmei, hinmei, hashira, ran As String

(...)

    'Kopikol imp
    retsu = WorksheetFunction.CountA(Columns("B:B"))
    crit = WorksheetFunction.CountA(Sheets("filtres").Range("1:1"))
    For m = 1 To crit
        insatsuh = WorksheetFunction.CountA(Sheets("impression").Range("C:C")) + 1
        insatsum = WorksheetFunction.CountA(Sheets("impression").Range("I:I")) + 1
        If insatsuh > insatsum Then
            hashira = "I"
            insatsu = insatsum
        Else
            hashira = "C"
            insatsu = insatsuh
        End If
        ran = Chr(m + 64)
        critnb = WorksheetFunction.CountA(Sheets("フィルター").Range(ran & ":" & ran))
        Range("A:B").AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=Sheets("フィルター").Range(ran & "1:" & ran & critnb), Unique:=False
        Range("1:1").EntireRow.Hidden = True
        Range("A1:B" & retsu).Select
*      Selection.SpecialCells(xlCellTypeVisible).Copy
        Sheets("impression").Range(hashira & insatsu).PasteSpecial Paste:=xlPasteValues
        Selection.SpecialCells(xlCellTypeVisible).ClearContents
        ActiveSheet.ShowAllData
    Next m
    With Sheets("impression")
        .Activate
        .PrintPreview
    End With

(...)


Merci pour vos reponses m(_ _)m
 

Pierrot93

XLDnaute Barbatruc
Re : comment eviter une erreur 1004 (copie d'une selection vide) ?

Bonjour,

petite info au passage, la méthode "SpecialCells" trenvoie un message d'erreur lorsque qu'il y a aucune cellule qui répond au critère... utiliser un gestionnaire d'erreur... A voir selon la suite de ta procédure...

bonne journée
@+
 

g.milano

XLDnaute Junior
en fait, je pensais qu'en testant la selection, je pouvais eviter la ligne, un truc genre :


Code:
      Range("A1:B" & retsu).Select
      if Selection <> ""
      then
            Selection.SpecialCells(xlCellTypeVisible).Copy
            Sheets("impression").Range(hashira & insatsu).PasteSpecial Paste:=xlPasteValues
            Selection.SpecialCells(xlCellTypeVisible).ClearContents
      end if
      ActiveSheet.ShowAllData
    Next m

evidement, if Selection <> "" n'existe pas, mais il doit y avoir une syntaxe pour gerer ce probleme non ? :/
 

Gorfael

XLDnaute Barbatruc
Re : Re: comment eviter une erreur 1004 (copie d'une selection vide) ?

Salut g.milano et le forum
Code:
    Range("A1:B" & retsu).Select
      if not(Selection is nothing) then
            Selection.SpecialCells(xlCellTypeVisible).Copy
            Sheets("impression").Range(hashira & insatsu).PasteSpecial Paste:=xlPasteValues
            Selection.SpecialCells(xlCellTypeVisible).ClearContents
      end if
      ActiveSheet.ShowAllData
    Next m
Utiliser les Select/Selection est le meilleur moyen de ralentir un code.
Pas sûr que ça fonctionne : même si ta Selection (beurk) n'est pas vide, elle ne contient pas forcément de cellule visible
Code:
        ran = Chr(m + 64)
        critnb = WorksheetFunction.CountA(Sheets("フィルター").Range(ran & ":" & ran))
moi, j'écrirais plutôt :
Code:
critnb = WorksheetFunction.CountA(Sheets("フィルター").columns(ran))
A+
 
Dernière édition:

g.milano

XLDnaute Junior
merci pour ta reponse et l'amelioration de critnb.

je sais que ma programmation n'est pas elegante, mais j'ai peu de temps pour ameliorer le code. J'y arrive de temps en temps (j'ai virer des tonnes d'activesheet par exemple).

j'essaye des fois des raccourcis, mais ca bug (probleme de syntaxe ou d'affectation, va savoir). je suis pafaitement conscient que faire des blabla.select puis selection.blabla n'est pas optimum, mais je ne trouve pas toujours les meilleures programations facilement...

ceci dit, si tu as une proposition pour faire sauter ma "beurk-selection", je suis preneur. :)



edit : je suppose par truchement que

Code:
crit = WorksheetFunction.CountA(Sheets("filtres").Range("1:1"))

peut devenir un joli

Code:
crit = WorksheetFunction.CountA(Sheets("filtres").rows("1"))
 
Dernière édition:

g.milano

XLDnaute Junior
Re: Re : Re: comment eviter une erreur 1004 (copie d'une selection vide) ?

Salut g.milano et le forum
Code:
    Range("A1:B" & retsu).Select
      if not(Selection is nothing) then
            Selection.SpecialCells(xlCellTypeVisible).Copy
            Sheets("impression").Range(hashira & insatsu).PasteSpecial Paste:=xlPasteValues
            Selection.SpecialCells(xlCellTypeVisible).ClearContents
      end if
      ActiveSheet.ShowAllData
    Next m
Utiliser les Select/Selection est le meilleur moyen de ralentir un code.
Pas sûr que ça fonctionne : même si ta Selection (beurk) n'est pas vide, elle ne contient pas forcément de cellule visible


je viens de tester ta solution, elle ne fonctionne pas. T_T
 

Statistiques des forums

Discussions
312 241
Messages
2 086 524
Membres
103 242
dernier inscrit
Patoshick