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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Plantage lors de l'exécution de mon code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Plantage lors de l'exécution de mon code

n°2205331
michele_
Posté le 04-10-2013 à 10:26:05  profilanswer
 

Bonjour,
 
J'ai créé une macro qui plante quand je la lance au bout d'un certain nombre de lignes.
En effet, ma boucle plante au bout d'environ 250 lignes  :??:  
Voici mon code :

Code :
  1. Public MyArray
  2. Sub CalculControleCode()
  3.  
  4.     MyArray = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" )
  5. ' Copie des EGP
  6.     Sheets("TCD retravaillé" ).Select
  7.     Range("A5:A" & Cells(Rows.Count, 1).End(xlUp).Row).Copy _
  8.         destination:=Sheets("Contrôle" ).Range("A3" )
  9.    
  10.     Sheets("Contrôle" ).Select
  11.    
  12.     '
  13.     Call Boucle(MyArray(1), 2)
  14.     Call Boucle(MyArray(4), 8)
  15.     Call Boucle(MyArray(7), 14)
  16.     Call Boucle(MyArray(10), 20)
  17.     '
  18. End Sub
  19. Sub Boucle(ByVal MaColonne As String, ByVal MonIndex As Integer)
  20. '
  21.     Dim Maligne As Integer
  22.     Dim MaValeur As String
  23.     Dim Resultat As String
  24.        
  25.     Maligne = 3
  26.     Do
  27.     '
  28.     MaValeur = Sheets("Contrôle" ).Range("A" & Maligne).Value
  29.     '
  30.     For i = MonIndex To (MonIndex + 5)
  31.         '
  32.         If Maligne = 257 Then
  33.             Debug.Print "Ligne 257"
  34.         End If
  35.        
  36.         Resultat = Recherche1(MaValeur, MyArray(i))
  37.         '
  38.         If Resultat <> "-" Then
  39.             '
  40.             Sheets("Contrôle" ).Range(MaColonne & Maligne).Value = Resultat
  41.             Exit For
  42.             '
  43.          End If
  44.         '
  45.     Next
  46.    
  47.     Maligne = Maligne + 1
  48.     '
  49.     Loop Until Sheets("Contrôle" ).Range("A" & Maligne).Value = ""
  50. '
  51. End Sub
  52. Function Recherche1(ByVal MaValeur As Variant, ByVal MaColonne As String)
  53. '
  54.     '
  55.     ligne = 0
  56.     '
  57.     Do
  58.         ligne = ligne + 1
  59.         Cible = Sheets("PB" ).Range("B" & ligne).Value
  60.     Loop Until Cible = MaValeur
  61.     '
  62.     Recherche1 = Sheets("PB" ).Range(MaColonne & ligne).Value
  63. '
  64. End Function


 
Si vous avez une idée de comment je peux vider la mémoire au fur et à mesure que ma boucle passe ... ce serait génial :)
D'ailleurs, le code fonctionne parfaitement quand je suis sur peu de lignes ....
 
Merci

mood
Publicité
Posté le 04-10-2013 à 10:26:05  profilanswer
 

n°2205353
Arl Guhr
Posté le 04-10-2013 à 12:13:56  profilanswer
 

Par hasard ton "Maligne" irais pas au dela de 32000 et quelques lignes?
 
Sinon, quel est le message d'erreur et sur quelle ligne l’exécution s'arrête?


---------------
il s'appel le ronge me doute
n°2205355
olivthill
Posté le 04-10-2013 à 12:34:02  profilanswer
 

Ca me rappelle un vieux problème que j'avais eu autrefois.
J'avais pensé aussi que cela venait de la mémoire qui n'était pas libérée.
Mais en réalité le plantage était dû à certaines cellules particulières.
Elles étaient nulles, mais pas vides.
Donc, il faudrait essayer de remplacer

Loop Until Sheets("Contrôle" ).Range("A" & Maligne).Value = ""


par

Loop Until Nz(Sheets("Contrôle" ).Range("A" & Maligne)) = ""

Message cité 1 fois
Message édité par olivthill le 04-10-2013 à 12:37:10
n°2205368
michele_
Posté le 04-10-2013 à 13:59:23  profilanswer
 

Merci olivhill ... je vais essayer ça.
Sinon, pour te répondre Arl Guhr, dans mon cas, "Maligne" ne dépasse pas 32000 lignes. D'ailleurs, la dernière ligne est 3931.
Et je n'ai aucun message d'erreur. Y a juste Excel qui ne répond plus au bout d'un moment. et en moyenne, c'est au bout de 250 lignes que ça plante.
Mais si j'utilise le pas à pas (F8) ... là ça marche et ça ne plante pas ...

n°2205369
michele_
Posté le 04-10-2013 à 14:05:52  profilanswer
 

olivthill a écrit :

Ca me rappelle un vieux problème que j'avais eu autrefois.
J'avais pensé aussi que cela venait de la mémoire qui n'était pas libérée.
Mais en réalité le plantage était dû à certaines cellules particulières.
Elles étaient nulles, mais pas vides.
Donc, il faudrait essayer de remplacer

Loop Until Sheets("Contrôle" ).Range("A" & Maligne).Value = ""


par

Loop Until Nz(Sheets("Contrôle" ).Range("A" & Maligne)) = ""



 
Je viens d'essayer de remplacer ma ligne de code par la tienne ... Je ne peux pas compiler le projet :(
Ça me met :

Erreur de compilation:
Sub ou Function non définie


C'est sur le "Nz" qui surligne l'erreur ...
 
 
Euh ... Je précise, je suis un peu beaucoup débutante en VBA. Et c'est mon 1er code pour lequel je transforme les formules en Excel en code (d'habitude, j'utilise l'enregistreur pour avoir ma formule retranscrite)

Message cité 1 fois
Message édité par michele_ le 04-10-2013 à 14:10:30
n°2205403
breizhbugs
Posté le 04-10-2013 à 15:50:42  profilanswer
 

Bonjour,
La boucle de ta fonction recherche1 s'arrête comment si elle ne trouve pas la valeur?


---------------
Seul Google le sait...
n°2205416
michele_
Posté le 04-10-2013 à 16:38:47  profilanswer
 

breizhbugs a écrit :

Bonjour,
La boucle de ta fonction recherche1 s'arrête comment si elle ne trouve pas la valeur?


En fait, elle trouvera obligatoirement la valeur car il s'agit d'un copié-collé entre les 2 onglets : la colonne B de l'onglet "PB" est copié sur la colonne A de l'onglet "contrôle"
Mais il est vrai que je n'ai pas fait de sortie dans le cas où ma recherche1 ne trouve pas la valeur (puisque dans mon fichier, ce n'est pas possible ...)

n°2205436
Marc L
Posté le 04-10-2013 à 20:32:04  profilanswer
 

 
           Bonjour,
 
           afin d'optimiser la recherche,voir l'aide de la fonction  Find  et son exemple, y a pas photo !
 
           Sinon la variable MyArray est totalement inutile dans ce code …
 
 
 

n°2205453
olivthill
Posté le 04-10-2013 à 23:58:31  profilanswer
 

michele_ a écrit :

Erreur de compilation:
Sub ou Function non définie


C'est sur le "Nz" qui surligne l'erreur ...


Désolé, j'ai confondu Excel et Access. Toutes mes excuses. :(  
 

n°2205882
michele_
Posté le 08-10-2013 à 11:33:33  profilanswer
 

Merci, je vais creuser pour utiliser la fonction Find
 
Pas de soucis olivthill ;)


Message édité par michele_ le 08-10-2013 à 11:33:53

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Plantage lors de l'exécution de mon code

 

Sujets relatifs
Formule matricielle Excel ou code VBABesoin d'idée coulée faire le code source en C + +
code du problème en c++lancer une application c++ depuis une autre application codé en java
[C] Bout de code fonctionne avec gdb mais pas en vrai [Résolu]Problème de code Wordpress, le design fait des siennes!
Tester execution d'une requete SQL[VB6] Simplification et optimisation code
xls erreur sur code "If Target =" lors d'insertion de ligne 
Plus de sujets relatifs à : Plantage lors de l'exécution de mon code


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