Nicocotte125
XLDnaute Nouveau
Bonjour à tous, la bonne année car il est encore temps, je viens d'écrire une fonction personnalisée qui à partir de deux colonnes effectues les opérations suivantes
* Compare la dernière valeur de la colonne "A:A - Ligne Fabrication" pour trouver la lignes de l'avant dernière valeur qui lui est identique
* Récupère sur la même ligne la valeur de la colonne "B:B- Format" et compare si elle correspond ou "NON" à la dernière valeur de la colonne "B:B - Format"
-> Retourne "OUI" ou "NON" en fonction....
Question :
1- Etant plus habitué à écrire des macro que des fonctions j'aurais voulu savoir si mon écriture était la plus efficace possible (avoir recours a des boucles dans une fonction personnalisée que l'on peut appeler plusieurs centaines de fois dans une feuille de calcul XXL, je ne suis pas sûr que ce soit le plus malin en terme de rafraichissement)
2 - Peut-être que dans ma façon d'écrire je peux progresser, n'hésitez pas à critiquer ma façon de coder...
3 - Comment peut-on coder un "prompt / invit" qui lors de la saisie de la sélection dans le formule l'on puisse se remémorer 6 mois après selon quel ordre on doit saisir les cellules / colonnes.
4- Comme vous le verrez dans la pièce jointe les premières lignes retourne le résultat #VALEUR, si je comprends bien pourquoi, j'aurai voulu néanmoins avoir votre avis sur la façon la plus sexy de gérer cela (sans laisser croire à l'utilisateur qu'il à mal paramétré la formule lors de la saisie)...
Code :
Function CHANGEMENT_FORMAT(Plage_Ligne_Fab As Range, Plage_Format As Range)
Dim Premiere_Ligne As Integer: Premiere_Ligne = Plage_Ligne_Fab.Row
Dim Derniere_Ligne As Integer: Derniere_Ligne = Premiere_Ligne + Plage_Ligne_Fab.Count - 1
Dim Format As String
Dim i As Integer: i = 0
'Balayage des valeurs de la plage de donnée en partant de l'avant dernière ligne-----------------------------------------
For i = Premiere_Ligne To Derniere_Ligne
If Cells(Derniere_Ligne - i, Plage_Ligne_Fab.Column).Value = Cells(Derniere_Ligne, Plage_Ligne_Fab.Column).Value Then
Format = Cells(Derniere_Ligne - i, Plage_Format.Column).Value
Exit For
Else
End If
Next
'Comparaison avec le format précédent--------------------------------------------------------------------------------------
If Format = Cells(Derniere_Ligne, Plage_Format.Column).Value Then
CHANGEMENT_FORMAT = "NON"
Else
CHANGEMENT_FORMAT = "OUI"
End If
End Function
¨PS : ma première contribution sur un forum VBA....
* Compare la dernière valeur de la colonne "A:A - Ligne Fabrication" pour trouver la lignes de l'avant dernière valeur qui lui est identique
* Récupère sur la même ligne la valeur de la colonne "B:B- Format" et compare si elle correspond ou "NON" à la dernière valeur de la colonne "B:B - Format"
-> Retourne "OUI" ou "NON" en fonction....
Question :
1- Etant plus habitué à écrire des macro que des fonctions j'aurais voulu savoir si mon écriture était la plus efficace possible (avoir recours a des boucles dans une fonction personnalisée que l'on peut appeler plusieurs centaines de fois dans une feuille de calcul XXL, je ne suis pas sûr que ce soit le plus malin en terme de rafraichissement)
2 - Peut-être que dans ma façon d'écrire je peux progresser, n'hésitez pas à critiquer ma façon de coder...
3 - Comment peut-on coder un "prompt / invit" qui lors de la saisie de la sélection dans le formule l'on puisse se remémorer 6 mois après selon quel ordre on doit saisir les cellules / colonnes.
4- Comme vous le verrez dans la pièce jointe les premières lignes retourne le résultat #VALEUR, si je comprends bien pourquoi, j'aurai voulu néanmoins avoir votre avis sur la façon la plus sexy de gérer cela (sans laisser croire à l'utilisateur qu'il à mal paramétré la formule lors de la saisie)...
Code :
Function CHANGEMENT_FORMAT(Plage_Ligne_Fab As Range, Plage_Format As Range)
Dim Premiere_Ligne As Integer: Premiere_Ligne = Plage_Ligne_Fab.Row
Dim Derniere_Ligne As Integer: Derniere_Ligne = Premiere_Ligne + Plage_Ligne_Fab.Count - 1
Dim Format As String
Dim i As Integer: i = 0
'Balayage des valeurs de la plage de donnée en partant de l'avant dernière ligne-----------------------------------------
For i = Premiere_Ligne To Derniere_Ligne
If Cells(Derniere_Ligne - i, Plage_Ligne_Fab.Column).Value = Cells(Derniere_Ligne, Plage_Ligne_Fab.Column).Value Then
Format = Cells(Derniere_Ligne - i, Plage_Format.Column).Value
Exit For
Else
End If
Next
'Comparaison avec le format précédent--------------------------------------------------------------------------------------
If Format = Cells(Derniere_Ligne, Plage_Format.Column).Value Then
CHANGEMENT_FORMAT = "NON"
Else
CHANGEMENT_FORMAT = "OUI"
End If
End Function
¨PS : ma première contribution sur un forum VBA....