[VBA] Argument pour la fonction cells

Fermé
Lulu - Modifié par Lulu le 23/07/2012 à 10:05
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 23 juil. 2012 à 12:13
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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
23 juil. 2012 à 10:25
Bonjour,

Feuil7.Select Est ce que cette feuille existe?????
0
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
23 juil. 2012 à 11:06
Re,
Je n'ai pas d'erreur!!!!!
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
23 juil. 2012 à 11:31
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
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
23 juil. 2012 à 11:59
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
est ce dû à la version ? 2007 est-il plus permissif que 2003?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
23 juil. 2012 à 12:13
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