Error1004 :select methode of range class failed

Résolu
Bonjour le Forum
Mon probléme est lorsque j'appuie sur le bouton Balayer ,il m'affiche "Error 1004 " ,je tenter de le résoudre ,mais pas de reponse.
Voici la piéce jointe de mon programme.
https://www.cjoint.com/c/FHlpIaYfbSw

Cordialement.

3 réponses

  1. Modérateur
    Bonjour,

    ActiveRange => n'existe pas. Utiliser ActiveCell

    Mais, de toutes façons, il convient de ne jamais sélectionner quoique ce soit en VBA.
    On accède aux propriété des objets sans les sélectionner...
    Dans ton cas, par exemple :
    Sheets(1).Range("D18").Offset(0, i - 1).Value = 123

    D18 est un exemple, je n'ai pas regardé ton code...
    0
    1. Bonjour
      pijaku
      ,
      Oui mais pourquoi je ne doit pas mettre .select
      0
    2. Modérateur
      @mohamed_2016Pour plusieurs raisons dont en voici quelques unes :
      1- parce que c'est inutile,
      2- parce que ça ralentit l'exécution du code,
      3- parce que c'est source d'erreur 1004,
      4- parce que l'on ne peux que sélectionner sur la feuille active
      5- parce qu'on ne peux pas masquer les feuilles
      6- parce que cela génère des problèmes dans l'utilisation des userforms...
      etc...
      0
    3. Merci pijaku ,
      Oui c clair ce que tu as dit , mais dans notre cas ,comment décaler une range sans sélectionner ?
      c la début du code
      For i = 1 To 4
      Range("J4", "J" & DL).Offset(0, i - 1).Select
      Selection.SpecialCells(xlCellTypeVisible).Select
       k = Cells(1, i + 9).Value
       j = Cells(2, i + 9).Value
      If Range("range").Offset(0, i).Value = "set" Then
      
       For Each Cell In Selection
       'ActiveCell.Select
      
       If (Cell.Value > k) And (Cell.Value < j) Then
       Cell.Value = Cell.Value
         ' la ligne de la cellule active
       Else
           F = Cell.Row
      0
    4. Modérateur
      @mohamed_2016Tu disposes de ton Range initial (mettons "B13") et tu décales avec Offset(Ligne, Colonne)...
      0
    5. @pijakuc la début du code
      For i = 1 To 4
      Range("J4", "J" & DL).Offset(0, i - 1).Select
      Selection.SpecialCells(xlCellTypeVisible).Select
       k = Cells(1, i + 9).Value
       j = Cells(2, i + 9).Value
      If Range("range").Offset(0, i).Value = "set" Then
      
       For Each Cell In Selection
       'ActiveCell.Select
      
       If (Cell.Value > k) And (Cell.Value < j) Then
       Cell.Value = Cell.Value
         ' la ligne de la cellule active
       Else
           F = Cell.Row
      0
  2. Contributeur
    Bonjour

    Tu inventes de nouveaux objets: feuille.existe ? :-)

    pour tester si trash n'est pas créé

    With ThisWorkbook
    On Error Resume Next 'appel gestionnaire d'erreur
    .Sheets("Trash").Activate
    If Err.Number > 0 Then 'si la feuille n'existe pas ---> n° erreur >0
    'on l'ajoute
    .Sheets.Add after:=Worksheets("Sheet1")
    'on la renomme
    .ActiveSheet.Name = "Trash"
    On Error GoTo 0 ' ferme gestionnaire d'erreur
    End If
    '....... code
    End With


    d'autre part, lignes très bizarres
    If Not Exist(F, tableau()) Then

    tableau(b) = F

    Cell non déclaré
    etc.

     Michel
    0
    1. Bonjour michel_m ,Bonjour le forum
      Merci pour la réponse
      Dans mon code ,j'ai utilié deux fonction : FeuilleExiste et Exist ,qui sont en bas du code .
      Pour les lignes :
      If Not Exist(F, tableau()) Then
           
           tableau(b) = F

      ou se trouve le problème ,,mon idée est stocker dans un tableau les numéros des lignes à supprimer sans les repeter si elle sont existantes avec F est le numéro du ligne.

      Cordialement
      0
    2. Contributeur
      @mohamed_2016Excuse moi, je n'avais pas regardé jusqu'en bas !

      au passage:
      salut Frank, ca va ?
      0
    3. Modérateur
      @michel_mSalut michel,

      Oui ça va bien. Merci.
      Et toi? Toujours en vacances???
      0
    4. @michel_mBonjour ,
      Pas grave
      michel_m
      , Avez vous une idée sur le probléme que j'ai affiché
      Merci.
      0
    5. Contributeur
      @pijakuHé oui! vacances finies hélas ! bien que pour un retraité, c'est toujours un peu les vacances :o)
      0
  3. Salut,

    C'est une erreur d'objet.
    Soit tu l'utilises mal, soit tu ne lui donne pas ce qu'il attend.

    Peux-tu poster la ligne qui te donne ce code d'erreur?
    0
    1. Bonjour
      Pierre1310
      ,
      Merci pour la reponse
      Voici la ligne qui donne l'erreur :
       
      Sheets(1).ActiveRange.Offset(0, i - 1).Select
      

      Cordialement
      0