Accéder au contenu principal

Calculate MAX of a list in VBA

Strangely such a function is not available in VBA.
Here is one that works with any number of strings or numbers.

Function Largest(ParamArray a() As Variant) As Variant
'returns the largest element of list
'List is supposed to be consistent: all nummbers, dates, strings.
'Nulls are allowed, but not in first position. Eventually provide a first low dummy value
'e.g:   largest(2,6,-9,7,3)         -> 7
'       largest("d", "z", "c", "x") -> "z"
'by Patrick Honorez --- www.idevlop.com

    Dim result As Variant
    Dim i As Integer
    
    result = a(LBound(a))
    
    For i = LBound(a) + 1 To UBound(a)
        If result < Nz(a(i), result) Then
            result = a(i)
        End If
    Next i
    Largest = result
End Function

Commentaires

Posts les plus consultés de ce blog

Champs obligatoires dans un formulaire Access

Comment rendre des champs obligatoires dans un formulaire Access ? La réponse la plus évidente est de modifier le design de la table et d'assigner au paramètre Required la valeur True. L'ennui de cette méthode est que le message d'erreur d'Access n'est pas très convivial et ne spécifie pas quel champ a déclenché l'erreur. Plutôt que d'écrire une routine de gestion d'erreur complexe, il y a une solution toute simple: affecter la valeur Faux à la propriété  Required du champ, Validation Rule: Is Not Null Validation Text: le texte à afficher, ex: "Code Postal obligatoire" ..et le tour est joué. Cette astuce vient de l'excellent Allen Browne, dont le site (en anglais) regorge d'informations utiles sur Access. ps: je n'ai pas sous la main de version française d'Access pour la traduction des propriétés, désolé...

Remplir une ListBox Access

Pour remplir une ListBox MS Access avec des données provenant d'un recordset, il suffit généralement de définir une rowSourceType = Table et de donner le nom de la table ou de la requête. Mais dans certains cas, il peut être préférable de fournir ces valeurs sous forme d'une ValueList. C'est le travail de la fonction ci-dessous. Sub FillList(ByRef lstBox As ListBox, strQry As String) 'fill combo with value list from recordset 'to be used when recordset is too slow to requery for sorting Dim rs As Recordset, strSrc As String, i As Integer Set rs = CurrentDb.OpenRecordset(strQry, dbOpenSnapshot) lstBox.RowSourceType = "Value list" lstBox.ColumnCount = rs.Fields.Count ReDim arSrc(rs.RecordCount * rs.Fields.Count) Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 strSrc = strSrc & rs.Fields(i) & ";" Next i rs.MoveNext Loop lstBox.RowSource = Left(strSrc, Len(strSrc) - 1) End Sub

Créer des références externes dynamiques en Excel (1)

Dans des formules Excel, on a parfois besoin de se référer a une plage de cellules se trouvant dans un autre document (classeur/workbook). Exemple: on a un document "portefeuille.xls" qui se réfere au document "tauxChange.xls". Si le chemin d'acces au document externe change, la référence ne fonctionnera plus. Pour éviter ce probleme, une solution serait de pouvoir utiliser une référence "relative", qui permettrait, par exemple, de pointer vers le classeur "tauxChange.xls" se trouvant dans le meme dossier que le classeur "portefeuille.xls". Ceci permettrait d'utilliser la paire de fichiers n'importe où, pourvu qu'ils soient tous deux dans le meme dossier. Mais comment faire ? Recupérer le chemin du document en cours en C5: =CELL("filename") permet de retrouver le chemin complet du document ou il est utilisé, et me retournera: H:\test excel\[portefeuille.xls]Actifs "Actifs" étant le nom de la fe