Faire un tri dans un tableau avec un nombre de colonnes et lignes aléa

Faire un tri dans un tableau avec un nombre de colonnes et lignes aléa - VB/VBA/VBS - Programmation

Marsh Posté le 05-11-2013 à 11:42:18    

Bonjour,
 
Je cherche à mettre dans ma macro un tri automatique sur mon tableau.
Le hic est que mon tableau a un nombre de colonnes et de lignes aléatoire.
j'ai donc fait ce code :
 

Code :
  1. Dim DernCol As Integer
  2.     DernCol = Cells(4, Cells.Columns.Count).End(xlToLeft).Column
  3.    
  4.     Dim DernLigneAS As Long
  5.     DernLigneAS = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
  6.    
  7.     Range("A4:" & DernCol & DernLigneAS).Select
  8.     ActiveWorkbook.Worksheets("Atterrissage Stocks" ).Sort.SortFields.Clear
  9.     ActiveWorkbook.Worksheets("Atterrissage Stocks" ).Sort.SortFields.Add Key:= _
  10.         Range("A5:A" & DernLigneAS), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
  11.         xlSortNormal
  12.     ActiveWorkbook.Worksheets("Atterrissage Stocks" ).Sort.SortFields.Add Key:= _
  13.         Range("B5:B" & DernLigneAS), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
  14.         xlSortNormal
  15.     ActiveWorkbook.Worksheets("Atterrissage Stocks" ).Sort.SortFields.Add Key:= _
  16.         Range("C5:C" & DernLigneAS), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
  17.         xlSortNormal
  18.     With ActiveWorkbook.Worksheets("Atterrissage Stocks" ).Sort
  19.         .SetRange Range("A4:" & DernCol & DernLigneAS)
  20.         .Header = xlYes
  21.         .MatchCase = False
  22.         .Orientation = xlTopToBottom
  23.         .SortMethod = xlPinYin
  24.         .Apply
  25.     End With


mais il plante :(
 
Savez vous ce qui cloche ?

Reply

Marsh Posté le 05-11-2013 à 11:42:18   

Reply

Marsh Posté le 05-11-2013 à 15:29:13    

 
           Bonjour.

michele_ a écrit :

mais il plante :(


           Super précis, merci !   :sarcastic:  
 
           Pour toute réponse, tout dépend du contenu (du n°) de la ligne déclenchant l'erreur
           et du message lui-même et de son aide, tout est pourtant expliqué dedans …
 

Reply

Marsh Posté le 05-11-2013 à 16:45:24    

dans le code c est sur la ligne 7 qu'il me débug en mettant :
 
Erreur d'exécution '1004':
La méthode 'Range' de l'objet '_Global' a échoué
 
Clairement, je pense que c est ma dimension "DernCol" qui fait tout planter
 
si quelqu'un a la solution merci, sinon, je vais rester sur le bon vieux tableau figé en mettant une colonne et une ligne de fin très très très lointaine ....
 
ps: Sinon, pour info ... quand je fais l aide, il me met strictement rien :(
alors que d'habitude, il y a une aide ... mais là rien

Reply

Marsh Posté le 05-11-2013 à 17:29:54    

 
           Place un point d'arrêt sur la ligne n°7 (ou écrire Stop en ligne n°6) puis lance la procédure
           puis en positionnant le curseur sur DernLigneAS apparaît sa valeur (ou dans la fenêtre des Variables locales) …
 
           Sinon il ne manquerait pas un A (ou autre lettre de colonne) après A4: en ligne n°7 par hasard ?
 
           J'ai aussi repéré une contradiction dans le code, la feuille est spécifiée un coup elle ne l'est pas;
           tout dépend si la procédure peut être lancée depuis une autre feuille ou pas …

Message cité 1 fois
Message édité par Marc L le 05-11-2013 à 17:32:34
Reply

Marsh Posté le 05-11-2013 à 18:09:46    

Marc L a écrit :

 
           Place un point d'arrêt sur la ligne n°7 (ou écrire Stop en ligne n°6) puis lance la procédure
           puis en positionnant le curseur sur DernLigneAS apparaît sa valeur (ou dans la fenêtre des Variables locales) …


Alors, les valeurs sont les suivantes :
DernCol = 87
DernLigneAS = 19

Marc L a écrit :

 
          Sinon il ne manquerait pas un A (ou autre lettre de colonne) après A4: en ligne n°7 par hasard ?


En fait, je crois que c'est bien ça mon problème :(
C'est "DernCol" qui me donne le numéro de la dernière colonne et non la lettre de la dernière colonne.
Comment peut on faire pour transformer le numéro de colonne en lettre ?

Marc L a écrit :

 
           J'ai aussi repéré une contradiction dans le code, la feuille est spécifiée un coup elle ne l'est pas;
           tout dépend si la procédure peut être lancée depuis une autre feuille ou pas …


C'est seulement la dernière partie de mon code. Et je pointe déjà avant sur la feuille en question (mais j'ai oublié de le rajouter pour vous donner l'exemple)
Mais je t'avouerais que les lignes 8 à 25 du code viennent de l'enregistreur de macros.
J'ai juste modifié en mettant mes dimensions "DernLigneAS" et "DernCol"

Reply

Marsh Posté le 05-11-2013 à 19:45:39    

 
           Ligne n°7 :   Range("A4", Cells(DernLigneAS, DernCol)).Select
 
           Mais franchement je me demande si cette ligne sert réellement à quelque chose, à part ralentir la procédure (Select) !

Message cité 1 fois
Message édité par Marc L le 05-11-2013 à 20:17:53
Reply

Marsh Posté le 08-11-2013 à 11:56:33    

Marc L a écrit :

 
           Ligne n°7 :   Range("A4", Cells(DernLigneAS, DernCol)).Select
 
           Mais franchement je me demande si cette ligne sert réellement à quelque chose, à part ralentir la procédure (Select) !


 
Merci :)
Je vais essayer ...
Par contre, savoir si cette ligne ralenti la procédure ou non ... je sais vraiment pas puisque je suis partie d'un enregistrement de macro

Reply

Marsh Posté le 08-11-2013 à 14:30:21    

 
           Pour moi elle ne sert strictement à rien ‼
 
           L'Enregistreur de macros enregistre toute manipulation même les sélections inutiles ! …
           On ne peut le lui reprocher car comment pourrait-il savoir à l'avance ce qui doit être fait ?!  :pt1cable:  
 

Reply

Sujets relatifs:

Leave a Replay

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