Bonjour,

Pour le contexte, il s'agit de traiter des nomenclatures ( liste de pièces mécaniques).
L’arborescence est limitée à un seul niveau avec une succession de tables, dont la première ligne concerne le composé et les suivantes sont ses composants.
L'objectif est de sortir ces informations du html et de les mettre dans un fichier texte à plat en vue d'un import par l'erp.

j'ai un script assez simple qui n'utilise que l'api native du navigateur et aucune autre dépendance. Il fonctionne en pas à pas, mais tombe en échec si lancé d'un coup.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
          function pushBOM() {
            let Tables = document.getElementById("nomenclatures").getElementsByTagName("table");
            let nomERP = "";
 
            for (let i = 0; i < Tables.length; i++) {
              let ligne_compose = Tables[i].getElementsByClassName("ligne_compose")[0];
 
              let type_compose = ligne_compose.getElementsByClassName("col_identification")[0].innerText;
              let code_compose = ligne_compose.getElementsByClassName("col_compose")[0].innerText;
              let desc_compose = ligne_compose.getElementsByClassName("col_designation")[0].innerText;
              nomERP = nomERP.concat("A|",code_compose,"||",desc_compose,"||\n");
 
              // Export des composants
              let Lignes = Tables[i].getElementsByTagName("tr");
 
              for (let i = 2; i < Lignes.length; i++) {
                // On saute l'entête et la ligne_compose
 
                let ligne_composant = Lignes[i];
                let type_composant = ligne_composant.getElementsByClassName("col_identification")[0].innerText;
                let code_composant = ligne_composant.getElementsByClassName("col_composant")[0].innerText;
                let desc_composant = ligne_composant.getElementsByClassName("col_designation")[0].innerText;
                let quantite = ligne_composant.getElementsByClassName("col_qte")[0].innerText;
                }
 
                // On vérifie que le type du composant est reconnu
                if(type_composant != "") {
                  nomERP = nomERP.concat("N|",code_compose,"|",code_composant,"|",desc_composant,"|",quantite,"\n");
                }
              }
            }
            console.log(nomERP)
          }
Un extrait du fichier html :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<table>
   <col class="col_identification">
   <col class="col_compose">
   <col class="col_composant">
   <col class="col_designation">
   <col class="col_qte">
   <tr>
      <th></th>
      <th>Fichier</th>
      <th>Composé</th>
      <th>Composant</th>
      <th>Désignation</th>
      <th>Qté</th>
   </tr>
   <tr class="ligne_compose">
      <td class="col_identification" title="Identifié comme un composant sous-ensemble (catalogue ou spécifique)">-</td>
      <td class="col_compose"><a id="221818-00">221818-00</a></td>
      <td class="col_composant"></td>
      <td class="pre col_designation" desc_en="FRAME">00- BATI</td>
      <td class="col_qte"></td>
   </tr>
   <tr>
      <td class="col_identification" title="Identifié comme un composant séquence (catalogue ou spécifique)">S</td>
      <td class="col_compose"></td>
      <td class="col_composant"><a href="#140E--00S00-0006">140E--00S00-0006</a></td>
      <td class="pre col_designation" desc_en="FRAME">00S BATI: BATI EQUIPE</td>
      <td class="col_qte">1</td>
   </tr>
   <tr>
      <td class="col_identification" title="Identifié comme un composant séquence (catalogue ou spécifique)">S</td>
      <td class="col_compose"></td>
      <td class="col_composant"><a href="#140E--00S11-0001">140E--00S11-0001</a></td>
      <td class="pre col_designation" desc_en="DOORS: BACK LEFT DOOR">00S PORTES: PORTE ARRIERE DROIT</td>
      <td class="col_qte">1</td>
   </tr>

J’obtiens une erreur
16:19:45,257 Uncaught ReferenceError: type_composant is not defined
pushBOM file:///NOMENCLATURE_M22-1818_20221117155616.html:34487
<anonymous> debugger eval code:1
debugger eval code:34487:20
pushBOM file:///NOMENCLATURE_M22-1818_20221117155616.html:34487
<anonyme> debugger eval code:1
Il fonctionne en pas à pas, mais tombe en échec si lancé d'un coup.

Si je commente la ligne "let type_composant = ligne_composant.getElementsByClassName("col_identification")[0].innerText;" et que je commande le test associé à cette variable un peu plus bas, la fonction fonctionne !!
Et je ne comprends pas pourquoi !
Merci d'avance pour votre aide.