18 mai 2011

VBA Excel

J'ai eu l'occasion d'apprendre quelque chose de très intéressant la semaine passée. Comment développer un complément Excel (add-in) et en faire le déploiement pour Excel 2003 ou 2007. Voici le contexte : en travaillant sur un appareil qui réalise des tests en traction, nous avons réalisé que les données enregistrées par l'appareil n'étaient pas exactes. Il semble qu'il y ait une erreur de communication quelque part sur le trajet de la caméra vidéo à la carte vidéo ou de la carte vidéo à l'ordinateur. Toujours est-il que les résultats que l'on peut importer dans Excel sont remplis de doublons. Les doublons ne sont pas exactement le même chiffre, car ils correspondent à une lecture de tension sur la carte vidéo, il y a donc un peu de bruit.

Solution : développer un complément Excel, l'envoyer à mes collègues pour qu'ils puissent corriger les données.

D'abord, on ouvre un nouveau classeur Excel. On Visual Basic en faisait ALT+F11. Il faut créer un nouveau module où l'on va écrire notre fonction. La mienne s'appelle Doublons().


Sub Doublons()
Dim row0 As Integer
    Dim column As Integer
    Dim row As Integer
    column = ActiveCell.column
    row0 = ActiveCell.row
    row = row0 + 1
    Do While ActiveWorkbook.ActiveSheet.Cells(row, column).Value <> ""
        If Abs(ActiveWorkbook.ActiveSheet.Cells(row, column).Value - 
ActiveWorkbook.ActiveSheet.Cells(row - 1, column).Value) < 0.005 Then
            ActiveWorkbook.ActiveSheet.Cells(row, column).Delete
        End If
    row = row + 1
    Loop
End Sub


La fonction trouve deux valeurs successives dont la différence est inférieure à 0.005 Volt. Elle détruit le doublon. Maintenant, pour exécuter cette commande, j'ai créé un bouton qui s'ouvre avec Excel. Lorsque l'on ouvre un nouveau classeur, si le complément est activé, il suffit d'appuyer sur le bouton qui apparaît pour exécuter la fonction.


Private Sub Workbook_Open()
    Dim CmdBar As CommandBar
    Dim Bouton As CommandBarButton
    Set CmdBar = 
Application.CommandBars.Add(Name:=Fredcou2011, Position:=msoBarTop, Temporary:=True)
    Set Bouton = CmdBar.Controls.Add(Type:=msoControlButton)
    With Bouton
        .FaceId = 483
        .OnAction = "Doublons"
    End With
    CmdBar.Visible = True
End Sub


Finalement, il faut enregistrer son classeur sous le format macro complémentaire. Notez que je suis conscient que le bouton ne se détruit pas en fermant Excel. Pour ce que j'avais à faire, ça me suffisait d'avoir un bouton... ou douze!

Publié par : Frédéric Couet

1 commentaire: