Affichage des articles dont le libellé est VBA. Afficher tous les articles
Affichage des articles dont le libellé est VBA. Afficher tous les articles

jeudi 29 mai 2008

Trucs et astuces VBA Excel

Quelques aides mémoires utiles pour Développement Macro VBA que je n'aurais pas à chercher :

Détecter un simple clic
Entre le SelectionChange et le DoubleClick il n'existe pas dans Excel (à ma connaissance :)) de moyen de capturer le simple clic dans une cellule (entendu par là, que le fait de faire un simple clic dans la cellule déjà sélectionné doit lever l'évenement).
L'astuce la plus fonctionnelle consiste lors du SelectionChange, qui est au moins déclenché la première fois, de faire son traitement et de terminer par :
ThisWorkbook.Worksheets(feuilleB).Range("B" & Target.row & ",Z" & Target.row).Select
Afin de modifier la sélection en cours (ici on sélectionne la cellule B et Z de la ligne en cours), ce qui fait que lors du prochain clic, SelectionChange sera forcément levé


Permettre de manipuler les plans avec les feuilles protégées
La protection d'une feuille entraine par défaut le fait qu'il n'est plus possible d'utiliser le mode plan permettant de manipuler les données en arbre, il faut alors affiner sa protection :
Sheets(feuilleB).EnableOutlining = activate
Sheets(feuilleB).Protect "", userInterfaceOnly:=activate

Ouvrir, refermer les niveaux d'un plan en VBA
Dans la continuité de l'astuce précédente et toujours sur les plans , voici le code VBA vous permettant de déployer ou replier les niveaux par programmation :
Sub expandCollapse()
'Expand niveau 2
MsgBox "Expand niveau 2"
Sheets(3).Outline.ShowLevels RowLevels:=2
'Collapse niveau 2
MsgBox "Collapse niveau 2"
Sheets(3).Outline.ShowLevels RowLevels:=1
End Sub

mercredi 13 février 2008

Appel d'une assembly .net depuis une application VBA

tout est dans le titre, comment donc faire appel à une assembly .net depuis une application VBA (au hasard Excel) :
  1. Créer une ClassLibrary
  2. Dans le propriétés du projet > Application > Information de l’assembly > cocher "Rendre l’assembly visible par COM"
  3. Puis dans Générer > cocher "Inscription pour Com Interop"
  4. Signer le projet avec un fichier SNK
  5. Dans la classe elle même, créer les membres et les fonctions en public
  6. Créer un fichier Excel.exe.config contenant le code ciblant le framework à utiliser :
    <?xml version="1.0"?>
    <configuration>
    <startup>
    <supportedRuntime version="v2.0.50727"/>
    </startup>
    </configuration>
  7. Mettre ce fichier au niveau de l'exécutable Excel.exe
  8. Ensuite au niveau de l'application Excel, ouvrir le Visual Basic Editor > Outils > Références > cocher votre composant dans la liste
  9. Créer votre code VBA pour faire appel à votre assembly :
    Sub CallAssemblyTest()
    Dim MaClass As New MonAssemblyClass
    MsgBox MaClass.MaFonction
    Set MaClass = Nothing
    End Sub
Plus d'infos dans ce précieux article : http://richnewman.wordpress.com/2007/04/15/a-beginner’s-guide-to-calling-a-net-library-from-excel/