Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1661 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

bug PC à cause d'une macro

n°2174276
Marc L
Posté le 06-02-2013 à 11:01:41  profilanswer
 

Reprise du message précédent :
 
           Soit une variable objet est créée juste après l'ouverture du fichier

Code :
  1.     Workbooks.Open […]
  2.     Set Ws = ActiveWorkbook.ActiveSheet

           puis cette référence est utilisée dans le code

Code :
  1.     For i = Ws.Cells(Ws.Rows.Count, 1).End(xlUp).Row To 2 Step -1
  2.         If Ws.Cells(i, 1) > "" And (Ws.Cells(i, 1) = Ws.[A1] Or _
  3.                                Left(Ws.Cells(i, 1), 1) <> "D" ) Then Ws.Rows(i).Delete
  4.     Next

          (l'utilisation de variables objet est pratique pour "naviguer" entre 2 classeurs ou feuilles),
 
          soit l'objet est qualifié ponctuellement dans une structure With
          (dans ce cas ne pas oublier le point devant chaque propriété y faisant référence)

Code :
  1.     With ActiveWorkbook.ActiveSheet
  2.         For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
  3.             If .Cells(i, 1) > "" And (.Cells(i, 1) = .[A1] Or _
  4.                                  Left(.Cells(i, 1), 1) <> "D" ) Then .Rows(i).Delete
  5.         Next
  6.     End With

mood
Publicité
Posté le 06-02-2013 à 11:01:41  profilanswer
 

n°2174277
minimoack
Posté le 06-02-2013 à 11:02:50  profilanswer
 

J'ai fait ça, et ça à l'air de bien marcher! :D
 

Code :
  1. Application.EnableCancelKey = xlInterrupt
  2.    
  3.     For i = ligneMax To 2 Step -1
  4.         If Cells(i, 1).Value = Range("A1" ).Value Or Left(Cells(i, 1).Value, 1) <> "D" Then
  5.             Rows(i).Delete shift:=xlDown
  6.         End If
  7.         If Cells(i, 1) = "" Then
  8.             compteur = compteur + 1
  9.         If compteur = 3 Then: Exit For
  10.         Else
  11.             compteur = 0
  12.         End If
  13.     Next

n°2174279
minimoack
Posté le 06-02-2013 à 11:03:42  profilanswer
 

mais je vais rajouter le ws :D
 
mercii beaucoup :jap:

n°2174284
Marc L
Posté le 06-02-2013 à 11:50:50  profilanswer
 

 
           Encore une fois, les lignes 7 à 12 ne servent à rien - sauf à ralentir le process !
           Il faut donc les supprimer ou les mettre en commentaire …
 

n°2174285
minimoack
Posté le 06-02-2013 à 11:52:41  profilanswer
 

ah oui je suis bête... vu qu'on remonte...

n°2174286
minimoack
Posté le 06-02-2013 à 11:52:48  profilanswer
 

:jap:

n°2174291
Marc L
Posté le 06-02-2013 à 12:24:02  profilanswer
 

 
           A noter dans mon aide VBA 2003 le  Delete  associé à  Rows  ne prend pas d'option, donc pas besoin de Shift et, de plus,
           les options (sur un Range) ne peuvent être que  xlShiftToLeft  ou  xlShiftUp  !           Idem avec  .EntireRow.
           A vérifier sur ta version …

Message cité 1 fois
Message édité par Marc L le 06-02-2013 à 12:25:44
n°2176279
minimoack
Posté le 18-02-2013 à 15:26:47  profilanswer
 


Bon... ça bug toujours... Si je lance mon fichier une fois, ça fonctionne, mais si je le relance, il redémarre mon PC... je ne comprends vraiment pas
 
Le truc, c'est que cette macro n'est pas particulièrement lourde par rapport à celles que je fais habituellement, bien au contraire...


Message édité par minimoack le 18-02-2013 à 16:22:08
n°2176288
Marc L
Posté le 18-02-2013 à 15:44:38  profilanswer
 

Marc L a écrit :

           A noter dans mon aide VBA 2003 le  Delete  associé à  Rows  ne prend pas d'option, donc pas besoin de Shift et, de plus,
           les options (sur un Range) ne peuvent être que  xlShiftToLeft  ou  xlShiftUp  !           Idem avec  .EntireRow.
           A vérifier sur ta version …


            Est-ce vérifié ?
 
            Merci de poster le code qui pose problème …
 

n°2176290
minimoack
Posté le 18-02-2013 à 15:52:16  profilanswer
 

Marc L a écrit :


            Est-ce vérifié ?
 
            Merci de poster le code qui pose problème …
 


 
 

Code :
  1. Dim i As Integer
  2.     Dim cell As Variant
  3.     Dim ligneMax As Integer
  4.    
  5.     Set Ws = ActiveWorkbook.ActiveSheet
  6.    
  7.     ' Sélection des lignes 1 à 7 et 9, et suppression
  8.     Ws.Rows("1:7" ).Delete
  9.     Ws.Rows("9:9" ).Delete
  10.    
  11.    
  12.     ' On ordonne les données par colonne
  13.     Ws.Columns("A:A" ).Select
  14.     Selection.TextToColumns Destination:=Range("A1" ), DataType:=xlFixedWidth, _
  15.         FieldInfo:=Array(Array(0, 1), Array(1, 1), Array(8, 1), Array(12, 1), Array(23, 1), _
  16.         Array(25, 1), Array(34, 1), Array(36, 1), Array(46, 1), Array(47, 1), Array(67, 1), Array( _
  17.         68, 1), Array(81, 1), Array(82, 1), Array(100, 1), Array(101, 1), Array(114, 1), Array(115, _
  18.         1), Array(128, 1)), TrailingMinusNumbers:=True
  19.        
  20.        
  21.     ' permet d'arrêter la boucle grâce à la touche "échap"
  22.     Application.EnableCancelKey = xlInterrupt
  23.        
  24.     ' On supprime les colonnes impaires à partir de 19 et en décroissant (19 étant la dernière colonne du tableau)
  25.     ' Ceci pour supprimer les colonnes contenant uniquement des !
  26.     For i = 19 To 1 Step -2
  27.         Ws.Columns(i).Delete
  28.     Next
  29.    
  30.     Dim compteur As Integer
  31.    
  32.     compteur = 0
  33.    
  34.     ' Revient à se positionner tout en bas de la feuille de calcul
  35.     ' et de faire ctrl + flèche du haut => cela emmène à la dernière cellule renseignée
  36.     ' Cela nous permet donc de récupérer le numéro de la dernière ligne,
  37.     ' et donc savoir où est la fin du tableau.
  38.     ligneMax = Ws.Range("A65536 " ).End(xlUp).Row
  39.    
  40.    
  41.     ' Boucle qui permet de :
  42.     ' Supprimer les doublons de la première ligne (entête)
  43.     ' Supprimer les lignes ne commençant pas par D, c'est-à-dire les lignes vides, ou inutiles
  44.     For i = ligneMax To 2 Step -1
  45.         If Ws.Cells(i, 1).Value = Ws.Range("A1" ).Value Or Left(Ws.Cells(i, 1).Value, 1) <> "D" Then
  46.             Ws.Rows(i).Delete shift:=xlShiftUp
  47.         End If
  48.     Next


Message édité par minimoack le 18-02-2013 à 16:21:56
mood
Publicité
Posté le 18-02-2013 à 15:52:16  profilanswer
 

n°2176291
minimoack
Posté le 18-02-2013 à 15:53:41  profilanswer
 

C'est au niveau de la dernière boucle que ça marche une fois sur deux

n°2176298
Marc L
Posté le 18-02-2013 à 16:07:11  profilanswer
 

 
           Dans les versions 2003 voire 2007 que j'utilise, pas besoin de Shift dans le Delete
           … d'où ma question concernant ta version 2002, as-tu vérifié dans son aide ?
 
           Comme déjà vu, mon code ne fonctionnait pas sur ta version alors qu'il ne posait aucun souci sur les miennes !
 
           Donc concernant la boucle débutant en ligne 44, j'enleverais le Shift
 
           Ensuite, quelle est la version de Windows, la quantité de RAM du PC …
           Quand un PC redémarre sans prévenir, c'est souvent dû à une "corruption" de mémoire,
           le fichier trop gros pour un PC manquant de RAM disponible …
 
           Cela peut être dû aussi au fichier Excel endommagé, redémarrer dans un nouveau classeur peut solutionner le problème …
 

n°2176301
minimoack
Posté le 18-02-2013 à 16:11:51  profilanswer
 

Marc L a écrit :

 
           Dans les versions 2003 voire 2007 que j'utilise, pas besoin de Shift dans le Delete
           … d'où ma question concernant ta version 2002, as-tu vérifié dans son aide ?
 
           Comme déjà vu, mon code ne fonctionnait pas sur ta version alors qu'il ne posait aucun souci sur les miennes !
 
           Donc concernant la boucle débutant en ligne 44, j'enleverais le Shift
 
           Ensuite, quelle est la version de Windows, la quantité de RAM du PC …
           Quand un PC redémarre sans prévenir, c'est souvent dû à une "corruption" de mémoire,
           le fichier trop gros pour un PC manquant de RAM disponible …
 
           Cela peut être dû aussi au fichier Excel endommagé, redémarrer dans un nouveau classeur peut solutionner le problème …
 


 
dans mon aide, il dit xlShiftUp pour le Delete  
 
J'ai XP professionel avec 4Go de RAM
Mais comme je disais, c'est largement pas la macro la plus lourde que j'ai dû exécuter
 
Je vais essayer de créer un nouveau fichier excel, et coller ma macro merci :D

n°2176303
minimoack
Posté le 18-02-2013 à 16:16:55  profilanswer
 

Bon... j'ai créé un nouveau fichier, et ai essayé avec xlUp... je viens de redémarrer...

n°2176304
Marc L
Posté le 18-02-2013 à 16:23:19  profilanswer
 

 
           Et avec Delete tout court, sans rien derrière ?
 

n°2176306
minimoack
Posté le 18-02-2013 à 16:27:14  profilanswer
 

la même... je viens encore de redémarrer :D
c'est trop bizarre...

n°2176307
minimoack
Posté le 18-02-2013 à 16:27:52  profilanswer
 

Je vais essayer sur un autre pc pour voir

n°2176308
Marc L
Posté le 18-02-2013 à 16:41:25  profilanswer
 

 
           Ok pour le test sur un autre PC (même version ?) …
 
           En début du code; il y a une sélection de la colonne A entière avant le TextToColumns,
           sélection inutile vu que cela peut être directement appliqué à l'objet colonne :

Code :
  1.     Ws.Columns(1).EntireColumn.TextToColumns [A1], xlFixedWidth, {…}

           L'idée étant si la sélection reste active au moment de supprimer une ligne, peut-être à force ta version perd le nord …
 
 
           Si tu ne veux pas faire la modif, en ligne 20 ajoutes juste

Code :
  1.     [B1].Select


 

n°2176313
minimoack
Posté le 18-02-2013 à 17:00:10  profilanswer
 

Bon ben... ça marche sur 3 autres PC avec même matériel, mêmes version, donc ça vient de mon ordinateur, peut-être que quelque chose a été mal installé...
merci pour votre aide, et au final, désolée de vous avoir dérangé pour rien, et merci pour tous ces conseils bien instructifs :) :jap:

n°2176318
Marc L
Posté le 18-02-2013 à 17:04:49  profilanswer
 

 
            Vérifier aussi la version du SP de XP car, sous un ancien portable avec 2 Go, j'avais parfois des plantages
            qui ont quasi disparu une fois le SP3 installé …   Peut-être aussi une mise à jour d'Excel était aussi passé par là …
 
            Parfois cela peut venir d'un conflit avec un programme résident ou d'une application ouverte …
 

n°2176384
minimoack
Posté le 19-02-2013 à 09:01:20  profilanswer
 

ben j'avais essayé de fermer les autres applications en cours pour lancer ma macro, mais cela n'avait rien changé, donc je pense que le problème n'est pas de mon ressort :(
merci :)

n°2176387
minimoack
Posté le 19-02-2013 à 09:42:25  profilanswer
 

Marc L a écrit :

 
           Ok pour le test sur un autre PC (même version ?) …
 
           En début du code; il y a une sélection de la colonne A entière avant le TextToColumns,
           sélection inutile vu que cela peut être directement appliqué à l'objet colonne :

Code :
  1.     Ws.Columns(1).EntireColumn.TextToColumns [A1], xlFixedWidth, {…}

           L'idée étant si la sélection reste active au moment de supprimer une ligne, peut-être à force ta version perd le nord …
 
 
           Si tu ne veux pas faire la modif, en ligne 20 ajoutes juste

Code :
  1.     [B1].Select


 


 
J'ai supprimé le Columns("A:A" ).select, et cela ne fonctionne pas. Cette partie du code était une macro enregistrée, et il semblerait que même si on sélectionne effectivement TextToColumns [A1], il faut tout d'abord sélectionner la colonne A, sinon, la modification de la mise en page ne fonctionne pas.

n°2176424
Marc L
Posté le 19-02-2013 à 12:10:02  profilanswer
 

 
           C'est certainement dû à ta version …   Pour le reste, à part une réinstallation de ton PC …
 

n°2176427
minimoack
Posté le 19-02-2013 à 12:13:20  profilanswer
 

J'ai demandé à ce qu'on me prépare un nouveau PC :D

n°2176429
Marc L
Posté le 19-02-2013 à 12:20:11  profilanswer
 

 
           Bien vu !   And cross our fingers ‼   C  U !
 

n°2176430
minimoack
Posté le 19-02-2013 à 12:22:28  profilanswer
 

thanks :D

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Macro excel : le nom de variable apparaît dans la formule excelMACRO EXCEL
Macro Word 2010 / Autoexec replacemacro copier coller
Aide pour Macro Excelmacro sur excel
MacroComment exécuter ma macro Excel automatiquement ?
macro recherche cellules dans 2 fichiersMise en page d'un signet sous Word par macro
Plus de sujets relatifs à : bug PC à cause d'une macro


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR