mardi 17 décembre 2013

Nombre de jours ou mois ou années entre 2 dates

Voici 3 fonctions permettant de retrouver le nombre de jours ou de mois ou d'années entre 2 dates.
(la date 1 doit être inférieure à la date 2)

1) Placer le code suivant dans un module :

'Nombre d'années
Function DifDateAnnee(pDate1 As Date, pDate2 As Date) As Long
    DifDateAnnee = DateDiff("yyyy", pDate1, pDate2)
End Function

'Nombre de mois
Function DifDateMois(pDate1 As Date, pDate2 As Date) As Long
    DifDateMois = DateDiff("m", pDate1, pDate2)
End Function

'Nombre de jours
Function DifDateJour(pDate1 As Date, pDate2 As Date) As Long
    DifDateJour = DateDiff("d", pDate1, pDate2)
End Function


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


Sub DifferenceEntre2Dates()
    
    Dim Date1 As Date, Date2 As Date
    Date1 = "01/12/2013"
    Date2 = "15/04/2016"
    
    MsgBox "Nombre d'années entre les 2 dates : " & DifDateAnnee(Date1, Date2)
    MsgBox "Nombre de mois entre les 2 dates : " & DifDateMois(Date1, Date2)
    MsgBox "Nombre de jours entre les 2 dates : " & DifDateJour(Date1, Date2)

End Sub

Trouver le numéro de la semaine à partir d'une date

Voici une fonction permettant de déduire le numéro de la semaine dans une année.
Attention à toujours vérifier pour une date qui s'approche du 31/12 (qui appartient donc à une semaine à cheval sur l'année suivante) : dans ce cas, cette fonction renverra la valeur 1 (pour la semaine 1 de l'année suivante).

1) Placer le code suivant dans un module :
Function Semaine(UneDate As Date) As Integer
   Semaine = Format(UneDate, "ww", , vbFirstFourDays)
End Function


2) Appeler la fonction de cette manière :
Sub NumeroDeSemaine ()
   MsgBox Semaine(#10/31/2013#)
End Function

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)