Pack de 92 nouvelles fonctions Excel et VBA

Bonjour à tous,

J'ai créé un pack de nouvelles fonctions pour Excel (gratuit) sous forme de macro complémentaire (qu'il suffit donc de copier un fichier dans un répertoire d'Excel pour profiter de toutes les nouvelles fonctions).

Il y a à la fois des fonctions à utiliser sur feuille Excel et d'autres fonctions visant à simplifier les développements VBA.

Pour le moment j'ai créé 28 51 64 65 73 74 77 81 87 88 90 96 92 nouvelles fonctions et je souhaiterai déjà savoir si c'est quelque chose qui vous intéresse ou non et si vous seriez prêt à utiliser ces nouvelles fonctions.


EDIT :

Pour la liste des fonctions ou pour télécharger la macro complémentaire, c'est ici :

www.excel-pratique.com/fr/fonctions-complementaires

Pour la fonction ColorBox, c'est ici :

www.excel-pratique.com/fr/fonctions-complementaires/colorbox-excel

colorbox

Pour la fonction DatePicker, c'est ici :

www.excel-pratique.com/fr/fonctions-complementaires/date-picker

excel date picker

Pour la fonction d'envoi d'emails, c'est ici :

www.excel-pratique.com/fr/fonctions-complementaires/mail

exemple email excel

Bonjour,

très bonne idée !!!

Je vote pour

P.

Bonjour Sébastien

bonjour le fil

pourquoi ne pas aussi revoir certaines fonctions qui étaient présentent dans MOREFUNC et qui ne tourne plus sur des versions récente d'excel ???

fred

Bonjour Sébastien (le Forum)

Très bonne idée en effet...

Sébastien a écrit :

pack de nouvelles fonctions pour Excel (gratuit) sous forme de macros complémentaires

pourquoi pas en fonctions simples ?

Concernant la gestion des tableaux je suppose que tu parles des tableaux VBA !


Des idées... ?

Fonctions simples de conversions de bases, Fonctions de gestions des heures/dates plus sympas que celles d'Excel

en fonctions Excel et/ou VBA

PremierJour(nomDuJour, ouChercher) qui renvoie le 1er jour

=> nomDuJour pourrait être une constante Lundi,Mardi...

=> ouChercher pourrait être une autre constante du style semaine, mois, année

PremierWeekEnd(ouChercher) qui renvoie le 1er week-end of course

PremierJourAnnee

et évidement leurs pendants inversés DernierJour, DernierWeekEnd, DernierJourAnnée


Petit détail... dans ta copie écran des fonctions, j'ai remarqué que tu utilises UnderScore "_" pour le nom de tes fonctions, personnellement je n'utilise jamais ce caractère... je trouve qu'il nuit à la lecture mais ce n'est que mon avis


En tout cas... bonne idée et surtout bon travail ! Merci pour toutes les évolutions passés, actuelles et à venir de ce forum !

Bonjour à tous,

Très bonne idée !

J'ajouterais également des procédures génériques (ex : envoi de mails, qui revient en permanence sur le forum)

Perso, j'utilise un stock de code standard, qui sert régulièrement, et qui pourrait enrichir cette bibliothèque.

Bonne soirée

Bouben

'*************************************************************
'Vérifie onglet existe dans un classeur (fonction générique)
'*************************************************************
Public Function OngletExist(poWB As Workbook, psNom As String) As Boolean

    Dim oSh As Worksheet
    Dim lErr As Long
    Dim sErr As String

    On Error Resume Next
    Set oSh = poWB.Worksheets(psNom)
    lErr = Err.Number
    sErr = Err.Description
    On Error GoTo 0

    If lErr = 0 Then
        OngletExist = True
    ElseIf lErr = 9 Then
        OngletExist = False
    Else
        MsgBox "Erreur n°" & lErr & vbCrLf & sErr, vbExclamation
    End If

    Set oSh = Nothing

End Function
'***************************************
'Vérifie clé existe dans collection
'***************************************
Public Function CleExist(pcol As Collection, psCle As String) As Boolean

    Dim oTmp As Object
    Dim lErr As Long
    Dim sErr As String

    On Error Resume Next
    Set oTmp = pcol(psCle)
    lErr = Err.Number
    sErr = Err.Description
    On Error GoTo 0

    If lErr = 0 Then
        CleExist = True
    ElseIf lErr = 5 Then
        CleExist = False
    Else
        MsgBox "Erreur n°" & lErr & vbCrLf & sErr, vbExclamation
    End If

    Set oTmp = Nothing

End Function
'***************************************
'Vérifie clé existe dans collection (2)
'***************************************
public Function CleExist(pcol As Collection, psCle As String) As Boolean

    Dim sVal As String
    Dim lErr As Long
    Dim sErr As String

    On Error Resume Next
    sVal = pcol(psCle)
    lErr = Err.Number
    sErr = Err.Description
    On Error GoTo 0

    If lErr = 0 Then
        CleExist = True
    ElseIf lErr = 5 Then
        CleExist = False
    Else
        MsgBox "Erreur n°" & lErr & vbCrLf & sErr, vbExclamation
    End If

End Function
'procédure générique : encadre une plage de cellules
Private Sub Encadrer(poOnglet As Worksheet, psPlage As String)

    poOnglet.Select
    poOnglet.Range(psPlage).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
End Sub
Public Function NumeroSemaine(pdtDate As Date) As Integer

    NumeroSemaine = WorksheetFunction.WeekNum(pdtDate, 2)

End Function
'premier jour d'une semaine donnée
'http://www.generation-nt.com/reponses/vba-excel-trouver-premier-jour-039-entraide-3192151.html
Public Function LundiSem(SEMAINE As Integer, Optional ANNEE As Integer) As Date
    If ANNEE = 0 Then ANNEE = Year(Date)
    LundiSem = 7 * SEMAINE + DateSerial(ANNEE, 1, 3) - _
    Weekday(DateSerial(ANNEE, 1, 3)) - 5
End Function
Public Function LettreColonne(NumCol As Integer) As String
Dim reste, quotient As Long
quotient = Int(NumCol / 26)
reste = NumCol Mod 26
If quotient = 0 And reste = 0 Then
    Exit Function
End If
If quotient = 0 Then
    LettreColonne = Chr(64 + reste)
Else
    If reste = 0 Then
        quotient = quotient - 1
        If quotient = 0 Then
            LettreColonne = Chr(64 + 26)
        Else
            LettreColonne = Chr(64 + quotient) & Chr(64 + 26)
        End If
    Else
        LettreColonne = Chr(64 + quotient) & Chr(64 + reste)
    End If
End If
End Function
Public Function ChoixDossier() as String 

    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ActiveWorkbook.Path & "\"
        .Show
        If .SelectedItems.Count > 0 Then
           ChoixDossier = .SelectedItems(1)
        Else
           ChoixDossier = ""
        End If
    End With

End Function

Bonjour à tous,

Si ça intéresse, je me suis écrit une dll pour la gestion des variables tableaux (tri, sélection, désélection, combobox liées, ...).

Il suffirait que j'écrive la doc qui va avec

Pierre

Bonjour bouben

bonjour le fil

en ce qui me concerne pour convertir le numero de colonne en Lettre j'utilise :

lettre = Split(Columns(numCol).Address(ColumnAbsolute:=False), ":")(1)

pour ce qui est bordures je fais comme ceci :

Sub Encadrer(poOnglet As Worksheet, psPlage As String)
With poOnglet.Range(psPlage).Borders  'sans rien derrière !
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With
End Sub

fred

Merci pour vos messages, je vais certainement retenir quelques idées

fred2406 a écrit :

pourquoi ne pas aussi revoir certaines fonctions qui étaient présentent dans MOREFUNC et qui ne tourne plus sur des versions récente d'excel ???

C'est une idée mais il faudrait me lister quelles sont les fonctions qui te paraissent intéressantes et qu'est-ce qu'elles font exactement ...

andrea73 a écrit :
Sébastien a écrit :

pack de nouvelles fonctions pour Excel (gratuit) sous forme de macros complémentaires

pourquoi pas en fonctions simples ?

L'idée est de simplifier les choses au maximum : 1 seule installation rapide pour avoir toutes les fonctions (+ des mises à jour facilitées puisqu'il suffit de remplacer le fichier)

Ca me paraît d'autant plus intéressant pour les utilisateurs qui n'utilisent pas le VBA (ce n'est pas forcément simple pour eux de devoir aller copier à chaque fois la fonction qui les intéresse dans un nouveau module et pour chaque nouveau classeur).

Note que certaines fonctions VBA sont disponibles dans les astuces VBA.

andrea73 a écrit :

j'ai remarqué que tu utilises UnderScore "_" pour le nom de tes fonctions, personnellement je n'utilise jamais ce caractère... je trouve qu'il nuit à la lecture

C'est amusant, je pense au contraire que les _ facilitent la lecture

C'est également une habitude du PHP où les _ sont très utilisés dans les noms des fonctions.

RE

faut que je retrouve celle qui ne fonctionnent plus concernant morefunc....

sinon autre idées des fonctions logiques :

Public Function logique_XOR(x As Long, y As Long)
    logique_XOR = x Xor y
End Function

Public Function logique_NOT(x As Long)
     logique_NOT = Not x
End Function

Public Function logique_AND(x As Long, y As Long)
    logique_AND = x And y
End Function

Public Function logique_OR(x As Long, y As Long)
    logique_OR = x Or y
End Function

Edit : après vérification ces fonctions existent déjà sur excel 2013 mais pas sur 2007 ... mais je ne sais pas si c'est une nouveauté de 2013 ou si 2010 proposait déjà ces fonctions logiques...

Bonsoir Sébastien et au fil !

Comme d'habitude, c'est une bonne idée !

Pour ma part, je suis preneur en ce qui concerne VBA

Bonsoir, bonjour ...

J'avoue, qu'à l'instant présent, je ne sais point exactement ce que je peux faire de toutes les fonctions, et codes VBA mentionnés dans les posts précédent. Quoique l'histoire des emails me donne des idées ^^

Néanmoins je trouve cela très intéressant. J'avance dans mon projet et je suis certain qu'a un moment donné au cours de son déploiement, cela me sera très utile.

Et c'est grâce a tous ces exemples, procédures, explications que je reste motivé a faire aboutir mon projet

Là tout de suite je n'ai pas de suggestions a ce que je pense utile, mais si je pense a quelque chose, je reviendrais le dire

Merci

Bonjour à tous,

Bonne idée qui aidera beaucoup de néophytes.

Cependant j'ai un à-priori sur les packs uniques qui englobent tout.

On se retrouve avec 103 fonctions qui chargent la mémoire pour 1 ou 2 qui sert, et une doc indigeste que plus personne ne lit.

Je verrai bien plusieurs packs par thème (Date, Texte, etc).

Dans le même esprit je verrai bien un pack Les essentiels avec les 10 plus demandées.

A débattre

eric

(re) à tous...

Quel fil sympa !

Oui "morefunc" (dans le temps) c'était génial je vais fouiller je crois qu'il doit me rester une version quelque part !

Sébastien a écrit :
andrea73 a écrit :

pack de nouvelles fonctions pour Excel (gratuit) sous forme de macros complémentaires pourquoi pas en fonctions simples ?

Sébastien a écrit :

L'idée est de simplifier les choses au maximum : 1 seule installation rapide pour avoir toutes les fonctions (+ des mises à jour facilitées puisqu'il suffit de remplacer le fichier)

Donc andrea73 a écrit :

effectivement la réponse est pertinente il est vrai que je ne suis pas familier (c'est tout et certainement dommage) des macro-complémentaires même si le côté "pratique" est évident en plus cela me forcera à m'y mettre


Sébastien a écrit :
andrea73 a écrit :

j'ai remarqué que tu utilises UnderScore "_" pour le nom de tes fonctions, personnellement je n'utilise jamais ce caractère... je trouve qu'il nuit à la lecture

Sébastien a écrit :

C'est amusant, je pense au contraire que les _ facilitent la lecture C'est également une habitude du PHP où les _ sont très utilisés dans les noms des fonctions.

c'est sans doute pour ça que je ne les aiment pas ! n'étant pas du tout adepte du style C (((((((((à parenthèses multiples)))))))))))

Pour les plus anciens ... savez-vous ce que signifiait les lettres du langage LISP inventé pour les besoins de l'intelligence artificielle (naissante à l'époque) ?

Bonjour Sébastien

Vivement la suite. je suis également intéressé.

On pourrait se passer de "Morefunction"

pour les celles que tu auras simplifiées.

Je regrette que tu aies abandonné ton projet ambitieux de la synchro de XLS.

Est à dire que même les bribes que tu avais commencées sont désuètes?

Je reviendrai pour mes suggestions

Merci d'avance

Bonjour tous...

D'autres idées viennent de jaillir...

Toujours dans le registres des dates...

EstPaques(date) qui dit si le jour est celui là... avec évidement

JourPaques(annee) qui dit quel jour est Pâques cette année là !

(même si nous avons tous quelque part une petite formule - parmi les nombreuses existantes)

EstFerie(date) qui dit si on bosse ou pas

Ou même des trucs encore plus sympa - vu côté planétaire du forum !

EstFeriePays(date,pays) et oui ! par ce que tout le monde ne fait les même chose en même temps !

Ou dans le registre des heures

UtcHeure qui dit quelle heure il est en "Temps Universel"

FuseauHeure(pays) ou FuseauHeure(+/-UTC) qui dit quelle heure il est là bas

Bref... il y a du pain sur la planche !

PS/ je suis tout à fait de l'avis

eriiic a écrit :

Cependant j'ai un à-priori sur les packs uniques qui englobent tout. On se retrouve avec 103 fonctions qui chargent la mémoire pour 1 ou 2 qui sert, et une doc indigeste que plus personne ne lit. Je verrai bien plusieurs packs par thème (Date, Texte, etc).

Bonjour à tous,

Je n'ai pas encore eu le temps de rassembler mes idées pour faire des suggestions (sondage lancé)... mais le rassemblement de séries de fonctions est évidemment une excellente idée, qu'on s'en serve comme source où puiser ou pour les utiliser en pack...

L'idée de packs par domaine (je n'ai pas noté qui l'avait émise [edit: c'était Eric ! toujours très rationnel !!!]) me paraît aussi plus fonctionnelle que des packs trop lourds.

Je vois que les choses avancent vite. Comme Andrea73, les Underscore me gênent toujours un peu et je n'ai pas l'habitude d'en utiliser... mais cela reste un petit détail .

Pour l'instant, je me contenterai de noter que le domaine des dates est évidemment un domaine où il y a beaucoup à faire pour pallier les lacunes d'Excel. Sans être spécialement porté sur la généalogie, des fonctions dates permettant de travailler sur des calendriers réels sans limitations pourraient être bienvenus... Exemple : la veille du 20 décembre 1582 était le 9 décembre en France (NB : pour les régions qui en faisaient partie...) ; en faisant 20 décembre 1582 -1 on devrait pouvoir obtenir 9 décembre avec un paramètre France, 19 décembre avec un paramètre Italie ou Espagne, le convertir en 10 décembre pour avoir la date du même jour en Angleterre, etc.

Un autre domaine qui me semblerait intéressant à développer concerne des fonctions de calculs sexagésimaux...

Pour ce qui est des fonctions de tests logiques, exemple choix d'options identifiées par des puissances de 2 : 1 2 4 8 16... En testant un résultat 13 avec i variant de 0 à 3 : l'expression 2^i And 13 pourra renvoyer successivement VRAI FAUX VRAI VRAI, résultat qu'une fonction peut renvoyer sous forme de tableau ou matrice...

Autre fonction qui pourrait être utile : regrouper des valeurs pour les renvoyer sous forme de matrice utilisable dans d'autres fonctions.

Cordialement. A+

Bonjour à tous,

Merci pour ces nouvelles suggestions

andrea73 a écrit :

PS/ je suis tout à fait de l'avis

eriiic a écrit :

Cependant j'ai un à-priori sur les packs uniques qui englobent tout. On se retrouve avec 103 fonctions qui chargent la mémoire pour 1 ou 2 qui sert, et une doc indigeste que plus personne ne lit. Je verrai bien plusieurs packs par thème (Date, Texte, etc).

Je ne suis pas convaincu que 10 ou 100 fonctions de plus change quelque chose au niveau de notre utilisation d'Excel ...

J'ai fait un premier test rapide à l'instant en créant un fichier Excel avec 10'000 fonctions minimalistes que j'ai enregistré en .xlam et activé dans "Compléments". J'ai ensuite lancé un fichier Excel que j'utilise très souvent et je n'ai remarqué aucune différence en l'utilisant ... C'est plutôt encourageant.

Pour ce qui est de la doc, je pense créer une courte doc très simple pour chaque fonction.

Je regrette que tu aies abandonné ton projet ambitieux de la synchro de XLS.

Est à dire que même les bribes que tu avais commencées sont désuètes?

J'avais terminé ce projet et ça fonctionnait très bien mais sans un minimum d'utilisateurs actifs, je ne pouvais pas laisser ça en ligne ...

Cordialement,

Bonjour,

Disons que retrouver une fonction dont on ne se rappelle plus le nom parmi 100 est plus dur que parmi 10.

Sans compter 1Mo de mémoire pris pour rien, plus le temps de chargement.

Mais c'est vrai que ça alourdi la gestion. Si ce n'est pas verrouillé l'utilisateur peut faire son tri aussi...

Pour ce qui est des fonctions de tests logiques, exemple choix d'options identifiées par des puissances de 2 : 1 2 4 8 16...

(MFerrand)

C'est vrai que les fonctions sur les bits manquent parfois (nostalgie du temps où l'on comptait les octets ? ).

2013 a ajouté des fonctions dans ce domaine, ce qui donne des idées.

On pourrait piocher dans ces ajouts en mettant un nom proche (f devant par exemple) et en utilisant la même syntaxe.

En plus de combler un manque ça permettrait d'adapter rapidement un classeur les utilisant.

Liste expurgée des fonctions trop spécialisées ou infaisables :

JOURS Renvoie le nombre de jours entre deux dates.

NO.SEMAINE.ISO Renvoie le numéro de la semaine ISO de l’année pour une date donnée.

BITET Renvoie un ET binaire de deux nombres.

BITDECALG Renvoie un numéro de valeur décalé vers la gauche de montant_décalage bits.

BITOU Renvoie un OU binaire de 2 nombres.

BITDECALD Renvoie un numéro de valeur décalé vers la droite de montant_décalage bits.

BITOUEXCLUSIF Renvoie un « OU exclusif » binaire de 2 nombres.

ESTFORMULE Renvoie VRAI s’il existe une référence à une cellule qui contient une formule.

FEUILLE Renvoie le numéro de feuille de la feuille référencée.

FEUILLES Renvoie le nombre de feuilles dans une référence.

SI.NON.DISP Renvoie la valeur que vous spécifiez si l’expression est résolue à #N/A ; autrement, renvoie le résultat de l’expression.

OUX Renvoie un OU exclusif logique de tous les arguments.

FORMULETEXTE Renvoie la formule à la référence donnée sous forme de texte.

COMBINA Renvoie le nombre de combinaisons avec répétitions pour un nombre d’éléments donné.

DECIMAL Convertit une représentation textuelle d’un nombre dans une base donnée en nombre décimal.

PLANCHER.MATH Arrondit un nombre au nombre entier inférieur le plus proche ou au multiple le plus proche de l’argument précision en tendant vers zéro.

ISO.PLAFOND Renvoie un nombre arrondi au nombre entier le plus proche ou au multiple le plus proche de l’argument précision en s’éloignant de zéro.

PERMUTATIONA Renvoie le nombre de permutations pour un nombre d’objets donné (avec répétitions) pouvant être sélectionnés à partir du nombre total d’objets.

VALEURNOMBRE Convertit du texte en nombre d’une manière indépendante des paramètres régionaux.

UNICAR Renvoie le caractère référencé par la valeur numérique donnée.

UNICODE Renvoie le nombre (point de code) qui correspond au premier caractère du texte.

Source pour récupérer détail et syntaxe : https://support.office.com/fr-fr/article/Nouvelles-fonctions-dans-Excel-2013-075c82bd-15b9-4ad6-af31-55bb6b011cb9?CTT=5&origin=HA102809308&CorrelationId=7775f98b-8cda-4334-a55f-cefb551b1d76&ui=fr-FR&rs=fr-FR&ad=FR&fromAR=1

Rien vu d'intéressant sur 2016...

Et tant que j'y suis j'ajoute une pierre à l'édifice dans un domaine non cité ici : les fusions.

Différentes fonctions sur les caractéristiques d'une fusion : taille, largeur, hauteur, ref haut-gauche, etc.

+ qq fonctions de comptage sur des plages d'une ligne avec plusieurs fusions, telles qu'utilisées de temps à autre sur des planning (compter les valeurs ne suffisant pas).

eric

183fn-infofusion.xlsm (31.33 Ko)

Wowo excellent !

faut que je prenne le temps de regarder tout ça ^^ e tous cas du peu que j'en voie ça va être tellement cool !

Moi j'utilise énormémemt l'underscore pour beaucoup de chose, même des noms de fichiers ou de dossiers ^^ comme les pratiques c'est comme les gouts et les couleurs

Bref je fais un point dès que j'ai pris le temps de me pencher là-dessus

PS : il y a d'ores et déjà 2 fonctions VBA qui peuvent être joutées : je me sers tout le temps de deux bouts de code pour trouver la dernière ligne et la dernière colonne remplie d'un tableau et même si ces codes sont minuscules, une fonction serait aussi bien que de les remettre à chaque fois :

Dim DernLigne As Long 
DernLigne = Range("A1048576").End(xlUp).Row
Dim DernCol As Integer 
DernCol = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Rechercher des sujets similaires à "pack nouvelles fonctions vba"