MACRO EXCEL - erreur objet

Résolu
BipBip -  
 BipBip -
Bonjour à tous,

j'ai fait un code pour copier la feuille "A", la renommer par une valeur contenue dans la feuille "B" et ensuite sur cette nouvelle feuille supprimer les colonnes dont la valeur en ligne 2 est différente de Qx ou "ok"...

J'ai une erreur à la ligne en gras, du type "erreur définie par l'application ou par l'objet"
Je ne sais plus quoi faire ! Merci d'avance poyur votre aide!

Salutations


Sub Copie()
Dim i, z, c
z = 7
Q = "Q" & i
For i = 1 To z
Q = "Q" & i
Sheets("A").Activate
Sheets("A").Copy after:=Sheets("B")
ActiveSheet.Name = Worksheets("B").Range("A" & i).Value
For c = 480 To 159 Step -1
If Sheets(Q).Range(2, c).Value <> Q And "ok" Then
Sheets(Q).Range(2, c).EntireColumn.Delete
End If
Next c
Next i
End Sub
A voir également:

3 réponses

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Il n'est pas facile de répondre sans connaître la version d'Excel et sans exemple de fichier qui plante !

Je suppose que tu utilises une version 2007 ou 2010 (avec plus de 256 colonnes), sinon c'est dèja une cause d'erreur.

Comme le dit david_wklw selon le cas, le contenu de la feuille B en A1:A7 peut provoquer une erreur.

Par contre le code suivant est erroné :

If Sheets(Q).Range(2, c).Value <> Q And "ok" Then
Sheets(Q).Range(2, c).EntireColumn.Delete 

Il conviendrait d'écrire :

If Sheets(Q).Cells(2, c).Value <> Q And Sheets(Q).Cells(2, c).Value <>"ok" Then
Sheets(Q).Cells(2, c).EntireColumn.Delete 
3
BipBip
 
Merci Patrice, cela ne plante plus avec Cells au lieu de Range !

Au passage quelle est la différence entre le deux?

Merci encore
0
BipBip
 
Et pour répondre à ta question j'utilise Excel 2010 :-)
0
chossette9 Messages postés 4239 Date d'inscription   Statut Contributeur Dernière intervention   1 311
 
Cells sert pour une cellule, Range pour une plage de cellule.
0
BipBip
 
Merci Chossette, mais il m'arrive de désigner une cellule avec range... par ex : Range("A1")

Mais bon... merci. A partir de maintenant je ferai la différence !
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Range correspond à une plage de cellules (qui peut aussi en contenir une seule) alors que Cells correspond à une seule cellule. Tu peux écrire Range(Cells(Ro, Co), Cells(Rx, Cx)).
0
david_wklw Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   4
 
C'est ca qui est faux ?
ActiveSheet.Name = Worksheets("B").Range("A" & i).Value

Il y a noté quoi dans la feuille B, cellule A1 ?
0
BipBip
 
Salut,

non c'est cette ligne qui plante :

If Sheets(Q).Range(2, c).Value <> Q And "ok" Then

Merci!
0
chossette9 Messages postés 4239 Date d'inscription   Statut Contributeur Dernière intervention   1 311
 
Bonjour,

tu dois réécrire deux fois ta première condition dans ton IF, c'est à dire que tu teste si ta valeur est différente de Q et si ta valeur est différente de OK. Du coup ça donne :
If Sheets(Q).Range(2,c).Value <> Q And Sheets(Q).Range(2,c).Value <> "ok" Then 


Cordialement.
0
BipBip
 
Merci Chossette mais avec ta ligne cela me donne toujours la même erreur "erreur définie par l'application ou par l'objet" ...
0
BipBip
 
Même en simplifiant la procédure, cela bug toujours sur la même ligne :

Sub Copie2()
For c = 480 To 159 Step -1
If Sheets("Q1").Range(2, c).Value <> "Q1" Or Sheets("Q1").Range(2, c).Value <> "ok" Then
Sheets(q).Range(2, c).EntireColumn.Delete
End If
Next c
End Sub
0
david_wklw Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   4
 
LEs range(2, c) c quand même byzarre non ?

C pour quoi ?
Patrice a tout dit je crois ^^
0