mardi 27 août 2013

Créer un bouton "Parcourir" pour sélectionner un Répertoire (Excel, Word, Access)

1) Créer un bouton sur un Userform, puis gérer l'événement Click côté code en intégrant le code ci-dessous

Private Sub CommandButton1_Click()

    Dim Repertoire As FileDialog
    Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
    Repertoire.Show
    If Repertoire.SelectedItems.Count > 0 Then
        MsgBox Repertoire.SelectedItems(1)
    Else
        MsgBox "Aucun Répertoire Sélectionné"
    End If

End Sub

lundi 5 août 2013

Trouver la lettre d'une colonne à partir de son numéro (Excel)

Le plus simple est de créer une fonction qui renverra à la demande la lettre :

1) Placer le code suivant dans un module :

'Fonction qui renvoie la lettre à partir du numéro d'une colonne
Public Function lettre_colonne(colonne As Integer)
    lettre_colonne = Split(Cells(1, colonne).Address, "$")(1)
End Function


2) Puis faire appel à cette fonction dans une procédure quelconque :

Recup = lettre_colonne(5) 'renvoie la lettre E

Comment vérifier si un fichier existe ou non (Excel, Word, Access)

Le plus simple est de créer une fonction qui renverra Vrai ou Faux en fonction du résultat

1) Placer le code suivant dans un module :

'Fonction qui vérifie si un fichier existe
Public Function FichierExiste(Chemin As String) As Boolean
    If Dir(Chemin) = "" Then
         FichierExiste = False
    Else
         FichierExiste = True
    End If
End Function


2) Puis faire appel à cette fonction dans une procédure quelconque :

If FichierExiste("C:\Dossier\toto.xlsx") = True then 
    'procédure si le fichier existe
Else
    'procédure si le fichier n'existe pas
End If

Trouver la dernière cellule avec un contenu dans une feuille Excel

Pour ajouter une ligne (ou une colonne) à une liste gérée à partir de Vba, il est souvent nécessaire de trouver la référence de la dernière cellule pour ensuite insérer la nouvelle donnée.

Pour se faire, il est pratique d'utiliser la fonction Vba "End" permettant d'obtenir rapidement cette information.

Important : cette fonction ne doit s’utiliser que dans des colonnes ou lignes ininterrompues.

A noter, qu'il est possible de rechercher cette info dans chaque direction :

  • vers la droite : xlRight
  • vers la gauche : xlLeft
  • vers le bas : xlDown
  • vers le haut : xlUp

Exemples :

Recup = Range("A50000").End(xlUp).Address 'obtient la référence de la cellule juste après la dernière cellule contenant une donnée en partant du bas dans la colonne A

Recup = Range("A2").End(xlDown).Address 'obtient la référence la dernière cellule contenant une donnée en partant du haut  dans la colonne A

Recup = Range("A2").End(xlDown).Row 'obtient la dernière ligne contenant une donnée en partant du haut  dans la colonne A

Recup = Range("A2").End(xlRight).Column 'obtient le numéro de la dernière colonne contenant une donnée vers la droite  dans la ligne 2


Pour trouver la lettre qui correspond à cette colonne voir cet article : Trouver la lettre d'une colonne à partir de son numéro

Gérer le nom d'une feuille de calcul Excel côté VBA

Cette méthode permet de s'affranchir du nom de l'onglet côté Excel qui peut ainsi être modifié à loisir par l’utilisateur final.

1) Renommer dans le panneau des propriétés la feuille de calcul, par exemple : FInfos

2) Placer le code suivant dans un module :

Public Function NomFeuille(Classeur As Workbook, NomVba As String) As String
    NomFeuille = Classeur.VBProject.VBComponents(NomVba).Properties("Name").Value
End Function


3) Puis faire appel à cette fonction dans une procédure quelconque :

Dim wb as Workbook
Dim ws as Worksheet
Dim NomReel as String

Set wb = ThisWorkbook
NomReel = NomFeuille(wb, "FInfos") 'Le 2e paramètre correspond au nom donné à l'étape 1
Set ws = wb.Sheets(NomReel)