[Résolu] Argument pour la fonction Cells

Argument pour la fonction Cells [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 20-07-2012 à 16:18:58    

Bonjour, c'est encore moi (j'ai l'impression d'être le seul à poser des questions aujourd'hui :)
 
Voici mon nouveau problème:
 
Je sélectionne une feuille et je cherche à sélectionner une cellule dans cette feuille:
L'argument pour la colonne de la fonction Cells dépend de l'indice i (la sélection se fait au sein d'une boucle for), du nombre nbvide (défini avant) et du nombre n+1 (n défini avant aussi et valant 0 pour le moment)
 

Code :
  1. Dim nbvide As Integer
  2. Dim n As Integer
  3. Feuil7.Select
  4. Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
  5. ActiveCell.Columns.Select
  6. Selection.EntireColumn.Hidden = True


 
Mon problème, c'est que j'obtiens une erreur au niveau de la ligne 5 qui ne s'exécute pas


Message édité par cfgluciole1 le 23-07-2012 à 13:49:43
Reply

Marsh Posté le 20-07-2012 à 16:18:58   

Reply

Marsh Posté le 20-07-2012 à 17:44:05    

c'est quoi comme erreur et que valent i, nbvide et n ?
 
Si l'opération "nbvide + 10 * (i - 1) + 1 + n" donne un résultat <=0 ou null, ça provoque certainement une erreur.


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 23-07-2012 à 09:35:01    

Bonjour oovaveoo,
 
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
 
La valeur de "nbvide + 10 * (i - 1) + 1 + n" est donc 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.  
 
Je te remets mon code ci dessous:
 

Code :
  1. Dim n As Integer
  2. Dim nbvide As Integer
  3. For i = 1 To 3
  4.         MsgBox (nbvide + 10 * (i - 1) + 1 + n)
  5.         Feuil7.Select
  6.         Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
  7.         ActiveCell.Columns.Select
  8.         Selection.EntireColumn.Hidden = True


 
L'erreur a lieu à la ligne 7.
 
Merci beaucoup,
 
Cfgluciole1
 


Message édité par cfgluciole1 le 23-07-2012 à 09:43:24
Reply

Marsh Posté le 23-07-2012 à 10:05:04    

Le code entier est trop long ?
parce-que là, je ne vois pas ce qui ne marche pas ??
 
Et qu'est-ce que tu veux faire, parce-que, ça me semble un peu compliqué cette opération pour juste sélectionner une colonne à masquer.


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 23-07-2012 à 10:23:15    

Bonjour oovaveoo,
 
Le code entier est un peu long mais je peux t'expliquer plus en détail ma manœuvre:
 
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))
 
Je te mets ci dessous un aperçu plus large de la macro:
 

Code :
  1. Sub Macromasquer()
  2.     Feuil6 .Select
  3.     ActiveSheet.Columns.Select
  4.     Selection.EntireColumn.Hidden = False
  5.    
  6.     Dim n As Integer
  7.     n = 0
  8.     Dim nbvide As Integer
  9.     nbvide = 2
  10.    
  11.     For i = 1 To 3
  12.        
  13.         Feuil6.Select
  14.         If Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Value < Cells(2, 3).Value Then
  15.         Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Select
  16.         ActiveCell.Columns.Select
  17.         Selection.EntireColumn.Hidden = True
  18.          Cells(c1.Row, 3 * (i - 1) + c2.Column + 2).Select
  19.         ActiveCell.Columns.Select
  20.         Selection.EntireColumn.Hidden = True
  21.         Cells(c1.Row, 3 * (i - 1) + c2.Column + 3).Select
  22.         ActiveCell.Columns.Select
  23.         Selection.EntireColumn.Hidden = True
  24.        
  25.         Feuil7.Select
  26.         Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
  27.         ActiveCell.Columns.Select
  28.         Selection.EntireColumn.Hidden = True
  29.         Cells(1, nbvide + 10 * (i - 1) + 2 + n).Select
  30.         ActiveCell.Columns.Select
  31.         Selection.EntireColumn.Hidden = True
  32.         Cells(1, nbvide + 10 * (i - 1) + 3 + n).Select
  33.         ActiveCell.Columns.Select
  34.         Selection.EntireColumn.Hidden = True
  35.         Cells(1, nbvide + 10 * (i - 1) + 4 + n).Select
  36.         ActiveCell.Columns.Select
  37.         Selection.EntireColumn.Hidden = True
  38.         Cells(1, nbvide + 10 * (i - 1) + 5 + n).Select
  39.         ActiveCell.Columns.Select
  40.         Selection.EntireColumn.Hidden = True
  41.         Cells(1, nbvide + 10 * (i - 1) + 6 + n).Select
  42.         ActiveCell.Columns.Select
  43.         Selection.EntireColumn.Hidden = True
  44.         Cells(1, nbvide + 10 * (i - 1) + 7 + n).Select
  45.         ActiveCell.Columns.Select
  46.         Selection.EntireColumn.Hidden = True
  47.         Cells(1, nbvide + 10 * (i - 1) + 8 + n).Select
  48.         ActiveCell.Columns.Select
  49.         Selection.EntireColumn.Hidden = True
  50.         Cells(1, nbvide + 10 * (i - 1) + 9 + n).Select
  51.         ActiveCell.Columns.Select
  52.         Selection.EntireColumn.Hidden = True
  53.         Cells(1, nbvide + 10 * (i - 1) + 10 + n).Select
  54.         ActiveCell.Columns.Select
  55.         Selection.EntireColumn.Hidden = True
  56.        
  57.         End If
  58.        
  59.         Feuil6.Select
  60.         If Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Value > Cells(3, 3).Value Then
  61.         Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Select
  62.         ActiveCell.Columns.Select
  63.         Selection.EntireColumn.Hidden = True
  64.         Cells(c1.Row, 3 * (i - 1) + c2.Column + 2).Select
  65.         ActiveCell.Columns.Select
  66.         Selection.EntireColumn.Hidden = True
  67.         Cells(c1.Row, 3 * (i - 1) + c2.Column + 3).Select
  68.         ActiveCell.Columns.Select
  69.         Selection.EntireColumn.Hidden = True
  70.         MsgBox (nbvide + 10 * (i - 1) + 1 + n)
  71.        
  72.         Feuil7.Select
  73.         Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
  74.         ActiveCell.Columns.Select
  75.         Selection.EntireColumn.Hidden = True
  76.         Cells(1, nbvide + 10 * (i - 1) + 2 + n).Select
  77.         ActiveCell.Columns.Select
  78.         Selection.EntireColumn.Hidden = True
  79.         Cells(1, nbvide + 10 * (i - 1) + 3 + n).Select
  80.         ActiveCell.Columns.Select
  81.         Selection.EntireColumn.Hidden = True
  82.         Cells(1, nbvide + 10 * (i - 1) + 4 + n).Select
  83.         ActiveCell.Columns.Select
  84.         Selection.EntireColumn.Hidden = True
  85.         Cells(1, nbvide + 10 * (i - 1) + 5 + n).Select
  86.         ActiveCell.Columns.Select
  87.         Selection.EntireColumn.Hidden = True
  88.         Cells(1, nbvide + 10 * (i - 1) + 6 + n).Select
  89.         ActiveCell.Columns.Select
  90.         Selection.EntireColumn.Hidden = True
  91.         Cells(1, nbvide + 10 * (i - 1) + 7 + n).Select
  92.         ActiveCell.Columns.Select
  93.         Selection.EntireColumn.Hidden = True
  94.         Cells(1, nbvide + 10 * (i - 1) + 8 + n).Select
  95.         ActiveCell.Columns.Select
  96.         Selection.EntireColumn.Hidden = True
  97.         Cells(1, nbvide + 10 * (i - 1) + 9 + n).Select
  98.         ActiveCell.Columns.Select
  99.         Selection.EntireColumn.Hidden = True
  100.         Cells(1, nbvide + 10 * (i - 1) + 10 + n).Select
  101.         ActiveCell.Columns.Select
  102.         Selection.EntireColumn.Hidden = True
  103.        
  104.         End If
  105.        
  106.         n = 1
  107.    
  108.     Next i


 
Je ne sais pas si cela t'aide dans ta démarche pour m'aider mais j'espère que c'est assez clair, sinon n'hésites pas à me redemander.
 
Merci beaucoup,
 
Cfgluciole1

Reply

Marsh Posté le 23-07-2012 à 10:57:58    

Ca donne quoi le  

Code :
  1. MsgBox (nbvide + 10 * (i - 1) + 1 + n)


 
Sinon, tu peux déjà simplifier :

Code :
  1. Feuil7.Select
  2.         Cells(1, nbvide + 10 * (i - 1) + 1 + n).Select
  3.         ActiveCell.Columns.Select
  4.         Selection.EntireColumn.Hidden = True
  5.         Cells(1, nbvide + 10 * (i - 1) + 2 + n).Select
  6.         ActiveCell.Columns.Select
  7.         Selection.EntireColumn.Hidden = True
  8.         Cells(1, nbvide + 10 * (i - 1) + 3 + n).Select
  9.         ActiveCell.Columns.Select
  10.         Selection.EntireColumn.Hidden = True
  11.         Cells(1, nbvide + 10 * (i - 1) + 4 + n).Select
  12.         ActiveCell.Columns.Select
  13.         Selection.EntireColumn.Hidden = True
  14.         Cells(1, nbvide + 10 * (i - 1) + 5 + n).Select
  15.         ActiveCell.Columns.Select
  16.         Selection.EntireColumn.Hidden = True
  17.         Cells(1, nbvide + 10 * (i - 1) + 6 + n).Select
  18.         ActiveCell.Columns.Select
  19.         Selection.EntireColumn.Hidden = True
  20.         Cells(1, nbvide + 10 * (i - 1) + 7 + n).Select
  21.         ActiveCell.Columns.Select
  22.         Selection.EntireColumn.Hidden = True
  23.         Cells(1, nbvide + 10 * (i - 1) + 8 + n).Select
  24.         ActiveCell.Columns.Select
  25.         Selection.EntireColumn.Hidden = True
  26.         Cells(1, nbvide + 10 * (i - 1) + 9 + n).Select
  27.         ActiveCell.Columns.Select
  28.         Selection.EntireColumn.Hidden = True
  29.         Cells(1, nbvide + 10 * (i - 1) + 10 + n).Select
  30.         ActiveCell.Columns.Select
  31.         Selection.EntireColumn.Hidden = True


 
En

Code :
  1. Feuil7.Select
  2. For k = 1 to 10
  3.         Cells(1, nbvide + 10 * (i - 1) + k + n).Columns.EntireColumn.Hidden = True
  4. Next k


 
Ca sera plus lisible et un peu plus concis  :)


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 23-07-2012 à 13:47:07    

Bonjour oovaveo,
 

Code :
  1. MsgBox (nbvide + 10 * (i - 1) + 1 + n)


 
renvoie la valeur 3 (première boucle, nbvide =2, n=0, i=1) puis 14 (deuxième boucle, nbvide = 2, n=1, i=2) puis 25  (troisième boucle, nbvide = 2, n=2, i=3)
 
Merci pour ton aide, j'ai simplifié mon code:
 

Code :
  1. For i = 1 To 3
  2.         Feuil6.Select
  3.         If Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Value < Cells(2, 3).Value Then
  4.         For j = 1 To 3
  5.             Cells(c1.Row, 3 * (i - 1) + c2.Column + j).Columns.EntireColumn.Hidden = True
  6.             Next j
  7.         Feuil7.Select
  8.         For k = 1 To 10
  9.         Cells(1, nbvide + 10 * (i - 1) + k + n).Columns.EntireColumn.Hidden = True
  10.         Next k
  11.        
  12.         End If
  13.         Feuil6.Select
  14.         If Cells(c1.Row, 3 * (i - 1) + c2.Column + 1).Value > Cells(3, 3).Value Then
  15.         For j = 1 To 3
  16.             Cells(c1.Row, 3 * (i - 1) + c2.Column + j).Columns.EntireColumn.Hidden = True
  17.             Next j
  18.            
  19.         MsgBox (nbvide + 10 * (i - 1) + 1 + n)
  20.         Feuil7.Select
  21.         For k = 1 To 10
  22.             Cells(1, nbvide + 10 * (i - 1) + k + n).Columns.EntireColumn.Hidden = True
  23.             Next k
  24.        
  25.         End If
  26.        
  27.         'Après le premier passage, la valeur esp passe à 1 pour tenir compte du format
  28.         n = n+1
  29.    
  30.     Next i


 
Excellente nouvelle par ailleurs: Le code marche maintenant parfaitement :D
 
Merci beaucoup pour tes conseils (je ne sais pas où se situait l'erreur cependant  :??: )
 
Bonne après midi,
 
Cfgluciole1


Message édité par cfgluciole1 le 23-07-2012 à 13:49:10
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed