Problème avec Debug.Print

cathodique

XLDnaute Barbatruc
Bonjour:),

Dans l'aide du vbe, j'ai trouvé un exemple de code pour utiliser la fonction DatePart.

J'ai pris l'un de mes fichiers pour exploiter cette fonction et me suis rendu compte que la fonction Debug.Print ne renvoyer ni les bons résultats,
ni le même nombre de lignes par rapport à la source (feuille ("bd")).

J'ai utilisé le code sur la feuille et ça donne de bons résultats mais pas le debug.print.

J'ai aussi utilisé la même fonction mais cette fois-ci en utilisant un array, ça donne aussi de bons résultats.
Par contre le debug.print plante, et je n'ai pas vraiment compris pourquoi?
VB:
Sub MaProcedure()
   Dim Sh1 As Worksheet, dl As Long, Tb(), i As Long
   Set Sh1 = ThisWorkbook.Worksheets("BD")
   dl = Sh1.Range("A" & Sh1.Rows.Count).End(xlUp).Row
   Tb = Sh1.Range("A2:L" & dl).Value2

   For i = 2 To dl
      Sh1.Cells(i, 14) = ""
      Sh1.Cells(i, 14) = "Trim" & DatePart("q", Sh1.Cells(i, 1)) 'bons résultats
      Debug.Print "Trim" & DatePart("q", Sh1.Cells(i, 1))   'ne donne de bons résultats
   Next i

   For i = 1 To UBound(Tb)
      Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
      Debug.Print "Trim" & DatePart("q", Tb(i, 1))   'erreur d'execution 13, incompatilité de type
   Next i

   Feuil2.Range("A1").Resize(UBound(Tb, 1), UBound(Tb, 2)) = Tb

End Sub
Merci, de me venir en aide.

Bonne journée.;)
 

Pièces jointes

  • Fonction DatePart.xlsm
    80.7 KB · Affichages: 8

bérylion

XLDnaute Occasionnel
bonjour

tout simplement parce que dans la ligne :
VB:
Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
ta variable Tb(i,1) est convertie de Date en String
et qu'a la ligne suivante :
VB:
Debug.Print "Trim" & DatePart("q", Tb(i, 1))   'erreur d'execution 13, incompatilité de type
tu donnes comme argument à ta fonction DatePart une variable texte à la place d'une date

essaye juste ca :
VB:
   For i = 1 To UBound(Tb)
 
      Debug.Print "Trim" & CStr(DatePart("q", Tb(i, 1))) 
   Next i
ca donne des résultats corrects

;)
 

cathodique

XLDnaute Barbatruc
bonjour

tout simplement parce que dans la ligne :
VB:
Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
ta variable Tb(i,1) est convertie de Date en String
et qu'a la ligne suivante :
VB:
Debug.Print "Trim" & DatePart("q", Tb(i, 1))   'erreur d'execution 13, incompatilité de type
tu donnes comme argument à ta fonction DatePart une variable texte à la place d'une date

essaye juste ca :
VB:
   For i = 1 To UBound(Tb)

      Debug.Print "Trim" & CStr(DatePart("q", Tb(i, 1)))
   Next i
ca donne des résultats corrects

;)
@bérylion Bonjour,

Je te remercie pour tes explications. Cependant, ta proposition ne fonctionne pas.
Debug.Print "Trim" & CStr(DatePart("q", Tb(i, 1)))

Mais pourquoi lorsque le code appliqué à la feuille fonctionne mais ne donne pas de bon résultats.

Tu me dis que ça fonctionne, as-tu testé? Pour confirmer que je n'ai pas fait de connerie chez-moi.

Merci quand même de m'avoir répondu.

Bonne journée.
 

Paf

XLDnaute Barbatruc
bonjour,

pour éviter l'erreur 13, il faudrait inverser deux lignes:
VB:
   For i = 1 To UBound(Tb)
      Debug.Print "Trim" & DatePart("q", Tb(i, 1))   ' plus d'erreur  13, puisque le tableau comporte encore une date
      Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
   Next i
 

bérylion

XLDnaute Occasionnel
tout est correct chez moi, apres avoir inversé les 2 lignes suivantes pour ne pas générer d'erreur :

ca :
VB:
   For i = 1 To UBound(Tb)
      Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
      Debug.Print "Trim" & DatePart("q", Tb(i, 1))   'erreur d'execution 13, incompatilité de type
   Next i

devient ca :
Code:
   For i = 1 To UBound(Tb)
      Debug.Print "Trim" & DatePart("q", Tb(i, 1))   'pas d'erreur
      Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
  Next i

fichier test en PJ
;)
 

Pièces jointes

  • Classeur3.xlsm
    20.4 KB · Affichages: 1

cathodique

XLDnaute Barbatruc
Paf;), Bérylion;),

Je vous remercie pour votre aide. En effet, en intervertissant les 2 lignes le code ne plante plus sur Debug.Print.

Cependant, avez-vous vérifié le nombre de lignes dans la fenêtre d’exécution. Est-il correct?

Car chez-moi, en fin d’exécution du code il n'y a que 199 lignes alors que dans la bd il y a 727 lignes.

Je me suis amusé à faire varier la variable i=2 to 200, ainsi j'ai les lignes de 2 à 199.

Si j'augmente de 1 la valeur max de i (i=2 to 201), dans ce cas j'obtiens les lignes de 3 à 200.

Et ainsi de suite. Au final, j'ai déduis que le maximum de lignes que peut prendre le debug.print est de 199,

quand on dépasse ce nombre les lignes sont écrasées. Suis-je dans le vrai?

Merci à vous.
 

bérylion

XLDnaute Occasionnel
oui, ca n'affiche "que" 200 lignes
si tu veux la totale, il faut les envoyer directement dans un fichier texte et pas dans la fenetre exec
;)

[EDIT : ]
pour etre tout a fait précis, c'est 200 lignes de 1021 caractères maxi
si tu dépasses, alors ca va a la ligne et ca comptera pour 2...
 
Dernière édition:

cathodique

XLDnaute Barbatruc
oui, ca n'affiche "que" 200 lignes
si tu veux la totale, il faut les envoyer directement dans un fichier texte et pas dans la fenetre exec
;)

[EDIT : ]
pour etre tout a fait précis, c'est 200 lignes de 1021 caractères maxi
si tu dépasses, alors ca va a la ligne et ca comptera pour 2...
Merci beaucoup. Je suis sûr que ce soir je dormirai moins bête.
J'ai appris une chose en plus aujourd'hui.
Un peu logique, en y réfléchissant c'est juste pour aider au débogage.
Tête en l'air, va...:oops:

Bonne fin de journée.;)
 

bérylion

XLDnaute Occasionnel
si tu veux récupérer tes 700 lignes, try this :

VB:
Sub MaProcedure()
Application.EnableEvents = Not Application.EnableEvents
   Dim Sh1 As Worksheet, dl As Long, Tb(), i As Long
   Set Sh1 = ThisWorkbook.Worksheets("BD")
   dl = Sh1.Range("A" & Sh1.Rows.Count).End(xlUp).Row
   Tb = Sh1.Range("A2:L" & dl).Value2

   For i = 2 To dl
      Sh1.Cells(i, 14) = ""
      Sh1.Cells(i, 14) = "Trim" & DatePart("q", Sh1.Cells(i, 1)) 'bons résultats
      Debug.Print "Trim" & DatePart("q", Sh1.Cells(i, 1))   'ne donne de bons résultats
   Next i

   For i = 1 To UBound(Tb)
      Var = Var & Chr(10) & "Trim" & DatePart("q", Tb(i, 1))   'erreur d'execution 13, incompatilité de type
      Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
   Next i

   Feuil2.Range("A1").Resize(UBound(Tb, 1), UBound(Tb, 2)) = Tb
  
    Shell "Notepad.exe", 1
    SendKeys Var, True
    'VBA.AppActivate Application.Caption

Application.EnableEvents = Not Application.EnableEvents
End Sub

c'est un peu lourdingue mais ca permet de les afficher à la volée sans les écrire nulle part
si y'en a pas plus que qq milliers ca reste relativement rapide, sinon faut vraiment les stocker 'en dur'

;)
 

cathodique

XLDnaute Barbatruc
si tu veux récupérer tes 700 lignes, try this :

VB:
Sub MaProcedure()
Application.EnableEvents = Not Application.EnableEvents
   Dim Sh1 As Worksheet, dl As Long, Tb(), i As Long
   Set Sh1 = ThisWorkbook.Worksheets("BD")
   dl = Sh1.Range("A" & Sh1.Rows.Count).End(xlUp).Row
   Tb = Sh1.Range("A2:L" & dl).Value2

   For i = 2 To dl
      Sh1.Cells(i, 14) = ""
      Sh1.Cells(i, 14) = "Trim" & DatePart("q", Sh1.Cells(i, 1)) 'bons résultats
      Debug.Print "Trim" & DatePart("q", Sh1.Cells(i, 1))   'ne donne de bons résultats
   Next i

   For i = 1 To UBound(Tb)
      Var = Var & Chr(10) & "Trim" & DatePart("q", Tb(i, 1))   'erreur d'execution 13, incompatilité de type
      Tb(i, 1) = "Trim" & DatePart("q", Tb(i, 1)) 'bons résultats
   Next i

   Feuil2.Range("A1").Resize(UBound(Tb, 1), UBound(Tb, 2)) = Tb
 
    Shell "Notepad.exe", 1
    SendKeys Var, True
    'VBA.AppActivate Application.Caption

Application.EnableEvents = Not Application.EnableEvents
End Sub

c'est un peu lourdingue mais ca permet de les afficher à la volée sans les écrire nulle part
si y'en a pas plus que qq milliers ca reste relativement rapide, sinon faut vraiment les stocker 'en dur'

;)
C'est très gentil de ta part:cool:. Je vais ajouter ton code à ma "bibliothèque".

1000 mercis.

Bonne soirée;)
 

Discussions similaires

Statistiques des forums

Discussions
312 323
Messages
2 087 290
Membres
103 509
dernier inscrit
mcn