MACRO EXCEL - erreur objet

Résolu
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

3 réponses

  1. 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
    1. 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
    2. Et pour répondre à ta question j'utilise Excel 2010 :-)
      0
    3. Contributeur
      Cells sert pour une cellule, Range pour une plage de cellule.
      0
    4. 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
    5. 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
  2. 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
    1. Salut,

      non c'est cette ligne qui plante :

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

      Merci!
      0
    2. Contributeur
      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
    3. 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
    4. 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
  3. LEs range(2, c) c quand même byzarre non ?

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