[VBA] Argument pour la fonction cells
Lulu
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 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:
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 :
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,
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,
A voir également:
- [VBA] Argument pour la fonction cells
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Excel compter cellule couleur sans vba - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
8 réponses
Bonjour,
Oui, Feuil7 existe bien.
Mon problème se situe au niveau des arguments pour la fonction Cells:
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.
En espérant que cela vous aide à mieux comprendre mon problème,
Lulu
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
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 ...
Pourtant je viens de relancer la macro et j'ai toujours un message d'erreur 1004 ...
C'est à n'y rien comprendre ...
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
Je ne sais toujours pas où était l'erreur avant cependant ...
Merci de votre aide f894009
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.
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.
bonjour,
j'obtiens le même message d'erreur!
solution :
j'obtiens le même message d'erreur!
solution :
Sheets("Feuil7").Selectou
Sheets("Feuil7").Cells(1, nbvide + 10 * (i - 1) + 1 + n).SelectBonne suite
Bonjour Paf,
En effet, meme si je n'avais pas cette erreur, il faut preciser dans le code comme vous l'avez fait.
Bye
En effet, meme si je n'avais pas cette erreur, il faut preciser dans le code comme vous l'avez fait.
Bye