vaSpread : Le Guide de Survie pour Maintenir et Migrer ce Vieux Contrôle VB6

Loic K.

30 juin 2025

Visual Basic 6 Interface

En Bref : Vous avez hérité d’une application VB6 avec un contrôle vaSpread ? Pas de panique. Cet article vous explique ce que c’est, comment le manipuler pour des dépannages rapides et, surtout, comment planifier sa migration vers des technologies modernes comme .NET.

Vous explorez le code source d’une application critique pour votre entreprise. Et là, vous tombez sur une ligne qui vous glace le sang : Begin FPSpread.vaSpread vaSpread1. Un frisson parcourt votre échine. Visual Basic 6. Un contrôle ActiveX dont la documentation a presque disparu des internets. Bienvenue dans le monde merveilleux de la maintenance logicielle !

vaSpread, et son petit nom complet FarPoint Spread, est un de ces composants qui a fait les beaux jours du développement rapide d’applications Windows dans les années 90 et 2000. Puissant à l’époque, il est aujourd’hui une source de maux de tête pour les développeurs chargés de moderniser le patrimoine applicatif.

Mais respirez. Dans cet article, on va décortiquer ensemble ce qu’est le vaSpread, comment gérer les tâches courantes et, le plus important, comment planifier sa migration sans s’arracher les cheveux. Pensez à moi comme votre collègue senior qui est déjà passé par là.

🧐 C’est quoi, au juste, le contrôle vaSpread ?

Avant de vouloir le remplacer, il faut comprendre l’animal. Le connaître, c’est déjà le maîtriser un peu.

Une star de l’ère Visual Basic 6

vaSpread est un contrôle ActiveX. Pour les plus jeunes, c’était une technologie Microsoft (basée sur COM) qui permettait d’encapsuler des fonctionnalités dans des composants réutilisables, un peu comme les composants web d’aujourd’hui, mais pour le bureau Windows.

Édité par FarPoint Technologies (une société rachetée depuis par GrapeCity), vaSpread était une sorte de mini-Excel que l’on pouvait glisser-déposer sur un formulaire en VB6. Il offrait des fonctionnalités de grille et de tableur très avancées pour l’époque :

  • Affichage et manipulation de données tabulaires.
  • Cellules de différents types (texte, nombre, date, bouton, case à cocher).
  • Liaison à des bases de données (Data Binding).
  • Formules de calcul.

En gros, c’était le couteau suisse pour toute application métier qui avait besoin d’afficher plus qu’une simple liste de données.

Pourquoi on le trouve encore en 2025 ?

Si vous croisez la route d’un vaSpread aujourd’hui, c’est presque toujours dans le même contexte : une application « legacy » (patrimoniale) développée en VB6 il y a 15, 20 ou même 25 ans. Ces applications sont souvent au cœur des processus métier d’une entreprise. Elles fonctionnent, elles font le job, et personne n’a osé y toucher pendant des années.

La philosophie était simple : « si ça marche, on ne touche pas ». Le coût et le risque perçus d’une réécriture complète ont fait que ces dinosaures logiciels ont survécu jusqu’à aujourd’hui.

🛠️ Manipuler vaSpread au quotidien : les opérations de base

Vous devez corriger un bug urgent ou ajouter une petite feature. Pas le temps de tout migrer. Voici comment survivre.

Insight de dev : La plupart des manipulations se font via des propriétés et des méthodes qui peuvent sembler étranges aujourd’hui. On ne parle pas de DataSource avec un bel IEnumerable. Pensez plutôt vaspread.Col, vaspread.Row et vaspread.Text pour accéder à une cellule, une par une. Un style très impératif.

Accéder et modifier une cellule

Pour lire ou écrire dans une cellule, il faut d’abord la sélectionner en définissant ses coordonnées Col et Row, puis utiliser la propriété Text.

' Sélectionner la cellule en colonne 2, ligne 3 (la numérotation commence souvent à 1)
vaSpread1.Col = 2
vaSpread1.Row = 3

' Écrire dans la cellule
vaSpread1.Text = "Nouvelle Valeur"

' Lire la valeur de la cellule
Dim maValeur As String
maValeur = vaSpread1.Text

Ajouter ou supprimer des lignes

Un besoin classique. On utilise la propriété MaxRows pour définir le nombre total de lignes. Pour en ajouter une à la fin, il suffit d’incrémenter cette valeur. C’est un problème récurrent que l’on retrouve dans de vieilles discussions de forums, comme cette discussion sur Stack Overflow.

' Ajouter une ligne à la fin de la grille
vaSpread1.MaxRows = vaSpread1.MaxRows + 1

Insérer ou supprimer une ligne au milieu est plus complexe et demande souvent d’utiliser des méthodes spécifiques comme Action avec des constantes (ex: SS_ACTION_DELETE_ROW).

Gérer les événements utilisateur

Votre utilisateur appuie sur « Entrée » et s’attend à passer à la cellule suivante. Par défaut, il ne se passe rien. Il faut intercepter l’événement (souvent KeyDown ou LeaveCell) et coder le comportement à la main.

Private Sub vaSpread1_KeyDown(KeyCode As Integer, Shift As Integer)
    ' Si la touche "Entrée" est pressée
    If KeyCode = vbKeyReturn Then
        ' Déplacer la sélection vers la ligne suivante
        vaSpread1.Row = vaSpread1.Row + 1
    End If
End Sub

Pour vous aider, voici un petit tableau de correspondance entre les vieilles propriétés vaSpread et ce que vous utiliseriez aujourd’hui dans un DataGridView en .NET.

Propriété vaSpread (VB6)Équivalent DataGridView (.NET)Usage
Text (ou ActiveCell.Text)DataGridView.CurrentCell.ValueContenu de la cellule active
MaxRows / MaxColsDataGridView.RowCount / ColumnCountDimensions de la grille
Row / ColDataGridView.CurrentCell.RowIndexIndex de la cellule active
CellTypeDataGridViewColumn.CellTypeType de cellule (bouton, etc.)
LockDataGridViewCell.ReadOnlyVerrouiller une cellule
BackColorDataGridViewCell.Style.BackColorCouleur de fond

🚀 L’étape cruciale : migrer vaSpread vers .NET

Le dépannage, c’est bien, mais c’est une solution à court terme. La vraie solution, pérenne et sécurisée, c’est la migration.

Pourquoi la migration est-elle inévitable ?

  • Fin de vie : L’environnement d’exécution de VB6 n’est plus supporté officiellement sur les versions modernes de Windows.
  • Sécurité : Les contrôles ActiveX sont une source notoire de failles de sécurité.
  • Architecture : C’est un composant 32-bit. Le faire fonctionner sur un système 64-bit peut être un cauchemar.
  • Écosystème : Impossible de l’intégrer proprement avec des services web modernes, des API REST, etc.
  • Compétences : Les développeurs VB6 sont une espèce en voie de disparition.

Vous avez deux stratégies principales pour la migration, avec des philosophies très différentes. La documentation de Mobilize sur la migration des grilles en parle très bien.

Option 1 : Le « wrapper » d’interopérabilité (AxHost), le pansement

L’idée est d’encapsuler le vieux contrôle ActiveX (FPSpread.ocx) pour qu’il puisse être utilisé depuis une application .NET (WinForms). C’est ce qu’on appelle l’interopérabilité COM. Visuellement, votre nouvelle application .NET affichera le bon vieux contrôle vaSpread.

  • Avantages : Rapide à mettre en place. Le code VB6 qui manipule la grille peut souvent être porté en VB.NET avec peu de changements.
  • Inconvénients : C’est le pire des deux mondes. Vous traînez une dette technique énorme. Vous gardez toutes les limitations du contrôle d’origine (32-bit, failles de sécu, look vieillot) tout en ajoutant une couche de complexité. Le déploiement est un enfer.

Option 2 : La migration vers un composant natif .NET, l’opération à cœur ouvert

Ici, on remplace vaSpread par un contrôle de grille 100% .NET. C’est plus de travail, car il faut réécrire tout le code qui interagissait avec la grille, mais le résultat est propre, moderne et maintenable.

Insight stratégique : Le choix entre wrapper et composant natif est crucial. Le wrapper est un pansement qui calme la douleur immédiate mais ne guérit pas la maladie. La migration vers un composant natif est une opération chirurgicale, plus lourde, mais qui sauve le patient.

✨ Alternatives modernes : par quoi remplacer vaSpread aujourd’hui ?

Si vous optez pour la vraie migration, voici les candidats les plus sérieux pour remplacer vaSpread.

ComposantÉditeurAvantagesInconvénientsIdéal pour…
DataGridViewMicrosoftGratuit, intégré à .NET, standard de l’industrie.Moins de fonctionnalités avancées « out-of-the-box ».Projets avec des besoins standards et un budget limité.
Spread for WinFormsGrapeCityLe successeur spirituel et direct. Migration très facilitée.Payant, peut être surdimensionné pour des besoins simples.Modernisation d’applications qui utilisaient intensivement vaSpread.
C1FlexGridComponentOneTrès léger, rapide et flexible.Payant.Applications nécessitant de hautes performances d’affichage.
Grilles WPF/WinUIMicrosoftTechnologies UI modernes, data-binding XAML puissant.Nécessite une refonte complète de l’UI vers WPF ou WinUI.Nouvelles applications ou refontes majeures de l’IHM.

Le choix dépend de votre budget, du niveau de complexité de votre grille d’origine, et de votre vision à long terme pour l’application. Pour beaucoup de migrations simples, le DataGridView de base est largement suffisant. Pour les usages intensifs, le produit de Spread for WinForms de GrapeCity est un investissement qui peut faire gagner un temps précieux.

❓ FAQ : Vos questions sur vaSpread

H3: Où trouver la DLL de vaSpread (FPSpread.ocx) ?

Le fichier est FPSpread.ocx (ou des variantes comme fpspr80.ocx). Si vous ne l’avez pas, il faut le récupérer depuis une installation existante de l’application ou des outils de développement VB6. Il n’est plus distribué officiellement pour de nouvelles installations.

H3: Est-ce que vaSpread fonctionne sur un OS 64-bit ?

Oui, mais avec des pincettes. Le contrôle étant 32-bit, votre application .NET qui l’héberge via un wrapper devra obligatoirement être compilée pour la plateforme « x86 ». Elle ne pourra pas tourner en mode « AnyCPU » ou « x64 », ce qui peut poser d’autres problèmes.

H3: Peut-on utiliser vaSpread dans une application web ?

Non. C’est un contrôle ActiveX conçu exclusivement pour les applications de bureau Windows. Tenter de l’intégrer dans une page web est une relique des années 90 avec Internet Explorer, et une très, très mauvaise idée aujourd’hui.


Tomber sur un contrôle vaSpread n’est pas une fatalité. C’est le symptôme d’une application qui a bien vécu et qui a rendu de fiers services. Votre rôle n’est pas de maudire l’héritage, mais de le comprendre pour mieux le transformer.

En analysant les besoins, en maîtrisant les manipulations de base pour le court terme, et surtout en planifiant une migration intelligente vers un composant .NET natif, vous assurerez non seulement la survie de l’application, mais aussi sa maintenabilité pour les années à venir. Courage !