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

Pour la fonction DatePicker, c'est ici :
www.excel-pratique.com/fr/fonctions-complementaires/date-picker

Pour la fonction d'envoi d'emails, c'est ici :
www.excel-pratique.com/fr/fonctions-complementaires/mail

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
- Messages
- 1'123
- Excel
- 2013 FR
- Inscrit
- 18.09.2015
- Emploi
- Développeur Bureautique Indépendant (Excel)
Bonjour Sébastien (le Forum)
Très bonne idée en effet...
pourquoi pas en fonctions simples ?Sébastien a écrit :pack de nouvelles fonctions pour Excel (gratuit) sous forme de macros complémentaires
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
En tout cas... bonne idée et surtout bon travail ! Merci pour toutes les évolutions passés, actuelles et à venir de ce forum !
- Messages
- 1'795
- Excel
- 2010
- Inscrit
- 25.08.2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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 :pourquoi pas en fonctions simples ?Sébastien a écrit :pack de nouvelles fonctions pour Excel (gratuit) sous forme de macros complémentaires
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
- Messages
- 1'123
- Excel
- 2013 FR
- Inscrit
- 18.09.2015
- Emploi
- Développeur Bureautique Indépendant (Excel)
(re) à tous...
Quel fil sympa !
Oui "morefunc" (dans le temps) c'était génial
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
c'est sans doute pour ça que je ne les aiment pas !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.
Pour les plus anciens
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
- Messages
- 1'123
- Excel
- 2013 FR
- Inscrit
- 18.09.2015
- Emploi
- Développeur Bureautique Indépendant (Excel)
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...
(MFerrand)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...
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
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