5. Import et transformation dans Excel
Si tout s’est bien passé, quand nous importons les CSV produit à l’étape précédente dans Excel (toujours en utilisant Données > Importer à partir d’un fichier CSV) nous constatons que les colonnes sont bien nommées à partir des métadonnées du CSVM. Nous pouvons figer cette ligne en utilisant : Affichage > Figer les volets > Figer la ligne supérieure.
Nous constatons que (probablement) les URLs ne sont pas encore utilisables comme nous le voudrions. Nous allons préparer 3 macros (une par colonne) qui vont servir à convertir les URLs en liens cliquables. Pour cela il faut activer le mode développeur pour que celui ci apparaisse dans le ruban Excel. Quand nous insérons la première macro, l’éditeur VBA se lance et nous pouvons coder les routines URL2DOI (DOIs cliquables), URL2LIG (Ligands IDs cliquables) et URL2PDBID (PDB IDs cliquables) :
![]() |
Le code de la macro URL2PDBID est simple, il consiste a repérer la colonne et les lignes (par exemple A2:A pour Entry ID). Nous sélectionnons les cellules incluant la valeur ‘rcsb.org/structure/‘ et nous ne gardons que la chaine (pdbID, correspondant à l’entrée PDB) présente après la fin de cette signature (chaine ‘structure/‘). Puis l’URL est supprimée (ligne cell.Hyperlinks.Delete) et reconstruite (commande cell.Hyperlinks.Add) en utilisant les variables urlBase et pdbID.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub URL2PDBID() Dim cell As Range Dim ws As Worksheet Dim pdbID As String Dim startPos As Long Dim endPos As Long Dim urlBase As String urlBase = "https://www.rcsb.org/structure/" Set ws = ActiveSheet For Each cell In ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row) If InStr(cell.Value, "rcsb.org/structure/") > 0 Then startPos = InStr(cell.Value, "structure/") + Len("structure/") endPos = InStr(startPos, cell.Value, """") pdbID = Mid(cell.Value, startPos, endPos - startPos) cell.Hyperlinks.Delete cell.Value = pdbID cell.Hyperlinks.Add Anchor:=cell, Address:=urlBase & pdbID, TextToDisplay:=pdbID End If Next cell MsgBox "Conversion terminée", vbInformation End Sub |
Les deux autres fonctions URL2LIG et URL2DOI sont similaires, il suffit de modifier l’étendue (la lettre correspondant à la colonne), la valeur de urlBase (ex: https://www.rcsb.org/ligand/), des tags (rcsb.org/ligand/ et /ligand) et de changer le nom des variables.
Il faudra être attentifs aux colonnes, suivant le rapport qui a été produit, la lettre de la colonne correspondante peut être différente, il faudra reporter cette information dans le script VBA.
Au final après exécution des 3 macros, la table Excel inclura les trois colonnes cliquables, par exemple pour les dernières entrées, nous aurons :
![]() |
Nous pouvons également renvoyer à la ligne automatiquement dans toutes les cellules, ce qui se fait via l’onglet Accueil, puis Renvoyer à la ligne automatiquement, ainsi il n’y aura pas de débordement d’une cellule sur la suivante (à droite). Nous pouvons aussi changer le nom des colonnes pour les rendre plus compactes, nous pouvons aussi réduire certaines données (par exemple X-RAY DIFFRACTION en RX), nous pouvons aussi justifier à droite … Le tableau est maintenant utilisable, nous pouvons ajouter des colonnes pour les annotations.
Et une visualisation des ligands ?
Pour plus de visibilité, la colonne SMILES est colorée en jaune. Avec un plugin type JChem for Excel (Chem Axon) nos pourrions avoir dans la colonne les structures chimiques correspondant aux ligands, éventuellement transformer la table en fichier SDF. Ceci dit pour plus 1000 molécules, l’interaction entre les deux composants, en natif ou via Java risque d’être instable.
Avec un peu de programmation Python nous avons la possibilité de transformer en quelques lignes cette table, du format CSVM en liste d’objets molécules (Openbabel/Pybel ou RDKit), puis en fichier SDF. Sauf que le SDF est dirigé par les structures chimiques, ce qui fait que nous allons avoir une entrée différente et distincte pour chaque ligand d’une même structure PDB. Il existe d’autres outils comme DataWarrior capables d’imports en texte/CSV délimités par des tabulations, mais le problème sera identique car il s’agit de la lecture directe d’une table.
Si nous voulons aller dans cette voie SDF, il faudra probablement remanier la table (via un objet csvm_ptr) de manière à qu’on résolve le modèle: i) 1 entrée PDB pour 1 ou n ligands et ii) c’est la molécule organique qui devient la clé principale. Dans ces conditions cette table sera acceptable par d’autres logiciels.
Liens et lectures
- Visual Basic for Applications (VBA) [ https://fr.wikipedia.org/wiki/Visual_Basic_for_Applications ].
- Référence VBA Office [ https://learn.microsoft.com/fr-fr/office/vba/ ].

