[VBA] Argument pour la fonction cells

Lulu -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je rencontre un problème avec la fonction Cells:

Voici les différentes variables utilisées:

nbvide est défini auparavant comme un entier et vaut 2 ici
i la variable de ma boucle for et varie de 1 à 3
n est un entier et vaut 0 ou 1

Le code me permet de masquer automatiquement certaines colonnes:

Dim n As Integer  
Dim nbvide As Integer  

nbvide=2
n=0

For i = 1 To 3  
        MsgBox (nbvide + 10 * (i - 1) + 1 + n)  
        Feuil7.Select  
        Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select  
        ActiveCell.Columns.Select  
        Selection.EntireColumn.Hidden = True


La valeur de "nbvide + 10 * (i - 1) + 1 + n" est au minimum de 3.
L'erreur que j'obtiens est une erreur d'exécution '1004': Erreur définie par l'application ou par l'objet.

L'erreur a lieu à la ligne 6 :
Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select 


Je pense à une erreur de syntaxe (la ligne Msgbox ne servant qu'à vérifier que je n'ai pas de problème sur la valeur de mon argument) mais je ne saurais la déceler ...

Merci d'avance,

8 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Feuil7.Select Est ce que cette feuille existe?????
    0
  2. Lulu
     
    Bonjour,

    Oui, Feuil7 existe bien.

    Mon problème se situe au niveau des arguments pour la fonction Cells:

      Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select


    Je vais détailler ci dessous la manoeuvre que je veux exécuter:

    Je dispose de deux onglets (Feuil 6 et Feuil 7) dans lesquels sont situés des données (différentes) rangées par années (de 2012 à 2015)

    Mon but est d'avoir une macro qui prend en entrée une année de début (Cells (2,3)) et de fin (Cells(3,3)) et qui me permet d'afficher uniquement les données entre des deux années sur les deux feuilles.

    Le bouton gérant la macro est sur la Feuil6.

    c1 et c2 sont des cellules permettant de repérer la ligne et colonne des années sur la feuille 6 (ce sont des balises pour repérer où je dois chercher mes années)

    Dans mon premier onglet, chaque année a 3 colonnes de données ( d'où le 3 * (i-1))
    Dans mon deuxième onglet, chaque année a 10 colonnes de données ( d'où le 10* (i-1))

    J'ai mis mon code ci dessous, mais il est assez dense et répétitif je dois l'avouer.

    Sub Macromasquer()
        Feuil6 .Select
        ActiveSheet.Columns.Select
        Selection.EntireColumn.Hidden = False
       
        Dim n As Integer
        n = 0
        Dim nbvide As Integer
        nbvide = 2
       
        For i = 1 To 3
           
            Feuil6.Select
            If Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Value < Cells(2, 3).Value Then
            Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
             Cells(c1.Row, 3 * (i - 1) + c2.Column + 2).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(c1.Row, 3 * (i - 1) + c2.Column + 3).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
           
            Feuil7.Select
            Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 2 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 3 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 4 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 5 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 6 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 7 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 8 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 9 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 10 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
           
            End If
           
            Feuil6.Select
            If Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Value > Cells(3, 3).Value Then
            Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(c1.Row, 3 * (i - 1) + c2.Column + 2).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(c1.Row, 3 * (i - 1) + c2.Column + 3).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            MsgBox (nbvide + 10 * (i - 1) + 1 + n)
           
            Feuil7.Select
            Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 2 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 3 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 4 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 5 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 6 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 7 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 8 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 9 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
            Cells(1, nbvide + 10 * (i - 1) + 10 + n).Select
            ActiveCell.Columns.Select
            Selection.EntireColumn.Hidden = True
           
            End If
           
            n = 1
       
        Next i


    En espérant que cela vous aide à mieux comprendre mon problème,

    Lulu
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,
    Je n'ai pas d'erreur!!!!!
    0
  4. Lulu
     
    Pas de message d'erreur?

    Pourtant je viens de relancer la macro et j'ai toujours un message d'erreur 1004 ...

    C'est à n'y rien comprendre ...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Lulu
     
    J'ai réduit la taille de mon code en faisant des boucles for et j'ai maintenant un code qui marche!

    Je ne sais toujours pas où était l'erreur avant cependant ...

    Merci de votre aide f894009
    0
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    En attendant vous pouvez diminuez le nombre de lignes de code en faisant un bloc de colonnes a masquer par bloc de colonnes.

    'exemple pour un bloc
    'Colonne de debut
    celdeb = Split(Cells(1, nbvide + 10 * (i - 1) + 1 + n).Address, "$")(1)
    'Colonne de fin
    celfin = Split(Cells(1, nbvide + 10 * (i - 1) + 10 + n).Address, "$")(1)
    Columns(celdeb & ":" & celfin).Hidden = True

    Pour votre erreur, je ne vois pas.
    0
  8. Paf
     
    bonjour,
    j'obtiens le même message d'erreur!

    solution :
    Sheets("Feuil7").Select
    ou
    Sheets("Feuil7").Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
    Bonne suite
    0
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour Paf,

    En effet, meme si je n'avais pas cette erreur, il faut preciser dans le code comme vous l'avez fait.

    Bye
    0
    1. Paf
       
      est ce dû à la version ? 2007 est-il plus permissif que 2003?
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Non, car au debut du code j'ai en effet modifie le premier Feuil6.select par Worksheets("Feuli6").Select , a ma grande surprise, les autres lignes similaire ne sortaient pas en erreur et l'erreur de depart ne correspondait pas a celle citee.

      Bye
      0