Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
En faisant tourner ma macro, j'ai une erreur d'exécution 13 "incompatibilité de type" qui s'affiche et en cliquant sur débogage j'ai ceci surligné mais impossible de trouver d'où vient l'erreur (c'est la 1ere ligne qui est surlignée en jaune)
VB:
If GetInfoCell And workerinf Then' F55 07/03/2024
XL.Cells(XLRow,1)= workerinf
XL.Cells(XLRow,2)= DateInf
XL.Cells(XLRow,3)= SI.Cells(CodeRow, j + AmountCol)
En faisant tourner ma macro, j'ai une erreur d'exécution 13 "incompatibilité de type" qui s'affiche et en cliquant sur débogage j'ai ceci surligné mais impossible de trouver d'où vient l'erreur (c'est la 1ere ligne qui est surlignée en jaune)
VB:
If GetInfoCell And workerinf Then' F55 07/03/2024
XL.Cells(XLRow,1)= workerinf
XL.Cells(XLRow,2)= DateInf
XL.Cells(XLRow,3)= SI.Cells(CodeRow, j + AmountCol)
Bonsoir.
Mettez des espions sur GetInfoCell et sur workerinf
Vous constaterez probablement que la valeur d'au moins une des deux est d'un type de donnée ne pouvant être converti ni en Boolean ni en Long.
Bonsoir.
Mettez des espions sur GetInfoCell et sur workerinf
Vous constaterez probablement que la valeur d'au moins une des deux est d'un type de donnée ne pouvant être converti ni en Boolean ni en Long.
Lors du débogage, soit sur erreur soit sur arrêt demandé par touche F9, sélectionnez une expression à contrôler de la ligne puis menu Débogage ou clic droit, commande Ajouter un espion.
Hello,
le If est louche car GetInfoCell est un booléen alors que workerinf a l'air d'être une valeur de cellule.
Place un Debug.Print juste avant le If pour voir ce que valent GetInfoCell et workerinf comme ceci par exemple :
VB:
Debug.Print GetInfoCell, workerinf
If GetInfoCell And workerinf Then' F55 07/03/2024
et dis nous ce qui est affiché dans la fenêtre d'exécution du VBA.
Ami calmant, J.P
Re....
quand je regarde cette partie de code où se trouve ton erreur
VB:
If GetInfoCell And workerinf Then' F55 07/03/2024
XL.Cells(XLRow,1)= workerinf
XL.Cells(XLRow,2)= DateInf
XL.Cells(XLRow,3)= SI.Cells(CodeRow, j + AmountCol)'************************************************' B.Maes 20/08/2003' Put numeric display format on result cell.
XL.Cells(XLRow,4).NumberFormat ="0.00"' B.Maes 20/08/2003' By multiplying the contents of the cell by 1, we force a numeric result in the SAIAU-sheet.' XL.Cells(XLRow, 4) = Application.Round(SI.Cells(i + AmountRow, j + AmountCol) * 1, 2)
valeur = Trim(SI.Cells(i + AmountRow, j + AmountCol))If valeur =""Then valeur =0
XL.Cells(XLRow,4)= Application.Round(valeur *1,2)
je ne vois pas de déclaration de variables en début de code sauf un seul et unique Dim iNbDeci As Integer
Les autres variables utilisées ne sont pas déclarées... Déjà c'est une source d'ennuis similaires à celui que tu rencontres
Je présume qu'en début de module ou de tes modules il n'y a pas la clause Option Explicit
Celle-ci permet de vérifier que toutes les variables sont bien typées et déclarées.
J'en déduis aussi par le bout de code que tu as posté que tes variables sont de type variant et Excel fait le typage comme il peut.
Ce que je comprends aussi dans cet extrait tu t'attends à tester des booléens : GetInfoCell And workerinf
Mais sont-ils réellement des Boolean ?
Afin d'y voir plus clair dans ton code et d'éviter d'autres plantages sur les types incompatibles je t'invite à revoir entièrement tes lignes de code et de "typer" tes variables par la clause Dim (malheureusement c'est le gros défaut des langages modernes qui acceptent ce genre de programmation à défaut du COBOL qui lui demande de la rigueur🙂)... sauf si celles-ci sont peut-être typées et déclarées en Global dans un module spécifique.
Juste quelques exemples
NbSht = Worksheets.Count ==> Dim NbSht as integer
XLRow = 2 ==> Dim XLRow as Long
GetInfoSht = True ==> Dim GetInfoSht as Boolean
For i = 0 To (NbRow - 1) => le For i comme ça pas très propre
au préalable déclarer
Dim lngIndex as Long
et For lngIndex = 0 To (NbRow - 1)
Idem dans la déclaration des arguments de la fonction que tu appelles
Sub CreateExcelFile_Go(language, CodeRow, DateCol, WorkerCol, _
Level1Col, Level1Def, Level2Col, Level2Def, _
Level3Col, Level3Def, AmountRow, AmountCol, _
TpWorkRow, TpWorkCol, TpLvl1Row, TpLvl1Col, _
TpLvl2Row, TpLvl2Col, TpLvl3Row, TpLvl3Col, _
RSelCol, CSelRow, SSelTxt)
Ils sont tous automatiquement de type Variant ! ==> c'est source d'ennuis comme ceux que tu rencontres
Je n'apporte pas réellement de solution à ton problème mais par ces conseils je t'évite d'en avoir d'autres...
Pour une meilleure aide il faudrait certainement ton fichier excel complet sauf si confidentiel... dans ce tu postes le contenu de tous les modules... car là nous n'avons qu'un extrait et il sera difficile de t'apporter plus t'aide.... les autres experts vba du forum seront aussi de mon avis sur tous ces conseils 🙂
Bien à toi, pour mieux t'aider télécharges les codes des modules et outillages que j'ai posté ainsi que ceux des autres experts VBA du site tu verras comment appliquer ces quelques règles.
Un espion c'est : clic-droit sur l'expression à espionner puis choisir "Ajouter un espion".
Mais il ne faut pas oublier d'afficher la fenêtre qui affiche les espions.
Sinon, mettre un point d'arrêt sur la ligne fautive, et passer la souris sur l'expression dont on veut connaître la valeur.
Bonjour, Ou'ps super bien vu 🙂 c'est l'habitude qui a pris le dessus...
Mais bon... la résolution du problème passera par une bonne révision du code et d'un bon typage des variables en début de module ou de fonction... déjà ça limitera la casse 🙂 - merci bonne journée
Re
petite piste
workerinf = SI.Cells(TpWorkRow, TpWorkCol)
et je vois ça
If CSelRow = 0 Then
GetInfoCell = True
tu tentes de comparer un booléen typé à la volée par l'affectation à True et workerinf = SI.Cells(TpWorkRow, TpWorkCol) ou workerinf reçoit la valeur d'une cellule... pouvant contenir de l'alphanumérique ou chaine de caractères... mais certainement pas un booléen... ou alors je passe à côté..... passe en mode Debug tu verras le type des variables qu'à réalisé VBA
Un espion c'est : clic-droit sur l'expression à espionner puis choisir "Ajouter un espion".
Mais il ne faut pas oublier d'afficher la fenêtre qui affiche les espions.
Sinon, mettre un point d'arrêt sur la ligne fautive, et passer la souris sur l'expression dont on veut connaître la valeur.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD