Error1004 :select methode of range class failed

Résolu
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -  
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -
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

Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
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
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour
Pierre1310
,
Merci pour la reponse
Voici la ligne qui donne l'erreur :
 
Sheets(1).ActiveRange.Offset(0, i - 1).Select

Cordialement
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Excuse moi, je n'avais pas regardé jusqu'en bas !



au passage:
salut Frank, ca va ?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention  
 
Salut michel,

Oui ça va bien. Merci.
Et toi? Toujours en vacances???
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
Hé oui! vacances finies hélas ! bien que pour un retraité, c'est toujours un peu les vacances :o)
0
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   > michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour ,
Pas grave
michel_m
, Avez vous une idée sur le probléme que j'ai affiché
Merci.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour
pijaku
,
Oui mais pourquoi je ne doit pas mettre .select
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Pour 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
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Tu disposes de ton Range initial (mettons "B13") et tu décales avec Offset(Ligne, Colonne)...
0
mohamed_2016 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
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