AIDE sur Fonction personnalisée en VBA

Bonjour,

Je suis notice en VBA, je souhaiterai adapter ce code à un mes fichiers, mes voila il y à un petit problème à ce code.

Voici le code que je voudrais utiliser :

Function SI_jaune(paye As Range, montant)

Application.Volatile

SI_jaune = " nul " 'Si FAUX

If paye.Interior.color = 52377 Then SI_jaune = " X " 'Si VRAI

End Function

Mon soucis le voila, ce code fait référence qu' à une seule colonne or moi je voudrais

qu'il puisse s'éxécuter de la colonne D à T.

Cordialement Samy

Bonjour,

Dans l’exemple joint, le test est effectué dans chacune des cellules de la ligne, de la première cellule en colonne A jusqu’à la dernière cellule renseignée.

23exemple.zip (16.93 Ko)

A+

Bonjour,

Malheureusement seule la colonne C est prise en compte pour ce code et moi j'aimerai qu'il puisse partir de la colonne C à T. Peut être que je m'y prend mal alors.

Cordialement

Bonjour,

Malheureusement seule la colonne C est prise en compte pour ce code et moi j'aimerai qu'il puisse partir de la colonne C à T. Peut être que je m'y prends mal alors.

Le test est effectué dans chacune des cellules de la ligne, de la première cellule en colonne A jusqu’à la dernière cellule renseignée, à savoir celle de la colonne T si cette cellule est renseignée.

Dans l’exemple que tu as fourni, tu peux remarquer que lorsqu’une cellule quelconque de cette plage est coloriée en jaune la valeur correspondante en colonne B devient "X".

Par contre, si tu souhaites que la valeur en colonne B devienne "X" lorsque toutes les cellules de la plage sont jaunes, c’est différent.

A toi de dire.

A+

Bonjour Frangy,

En effet ce que tu me proposes est exactement ce que je cherchais désespéramment depuis pas mal de temps.

Dans ta première réponse je n'avais pas vue que tu avais joins un fichier.

Tous mes remerciements peut être à bientôt pour d'autres aventures VBA.

Cordialement Samy


Une dernière demande peux tu me dire quelle est la partie du code qui permet de délimiter la plage de C à T.

Pour que je puisse comprendre, J'essaie de comprendre le code mais là j'ai du mal à interpréter.

Une dernière demande peux-tu me dire quelle est la partie du code qui permet de délimiter la plage de C à T.

La plage est définie par la ligne de code suivante

Set Plage = Range(Cells(Paye.Row, 1), Cells(Paye.Row, Columns.Count).End(xlToLeft))

Prenons l’exemple de la cellule B2 qui contient la formule

=SI_jaune(C2)

Si tu regardes le code de la fonction SI_jaune, tu constates que l’argument correspondant à C2 est une variable range nommée Paye.

Paye.row correspond donc dans ce cas à la ligne 2 et Cells(Paye.Row, 1) correspond à la cellule A2.

D’autre part, Cells(Paye.Row, Columns.Count).End(xlToLeft) correspond à la dernière cellule renseignée de la ligne 2, à savoir T2.

Plage correspond donc à la plage A2:T2.

A+

Ok j'essaie de comprendre,

je me permets de vous retourner le fichier dans son intégralité, car mon tableau va jusqu'à la colonne CV.

J'aimerai que le code vérifie seulement les données des colonnes D à T.

votre code j'ai réussi à le faire partir de la colonne D mais par contre pour le stopper à T alors la ????.

10formule-si-jane.zip (23.46 Ko)

La colonne D est la colonne 4.

La colonne T est la colonne 20.

Pour définir la plage de D à T, il suffit de noter :

Set Plage = Range(Cells(Paye.Row, 4), Cells(Paye.Row, 20))

A+

Bonjour,

C'est exactement ce que je cherchais à faire, je vous remercie, est il possible de vous demander aussi cette dernière requéte.

Dans le même tableau qui servira à 28 personnes.

L'histoire de la X c'est ok, mais je voudrais aussi que dés lors qu'une personne modifie une cellule toujours de la colonne D à T devienne jaune pour que la X apparaisse en colonne.

J'ai trouvé ce code mais je n'arrive pas à l'appliquer mon fichier.

J'ai essayé d'appliqué le morceau de code que vous m'avez fait "Set Plage = Range(Cells(Paye.Row, 4), Cells(Paye.Row, 20))", mais il me met un message d'erreur.

Le voici :

Private Sub Workbook_Open()

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Target.Interior.Color = vbYellow 'Jaune

End Sub

Bonjour,

Dans l’exemple joint, tu trouveras le code qui permet de colorier en jaune les cellules modifiées de la plage comprise entre les colonnes D et T.

Ce code est placé dans le module de la feuille "Feuil1".

11exemple.zip (20.53 Ko)

Par contre, je ne vois pas l’intérêt d’avoir créé d’une part une fonction personnalisée pour détecter les cellules jaunes et d’autre part une procédure pour colorier les cellules en jaune si celles-ci sont modifiées.

A+

J'aurai du commencer par vous expliquer la procédure en effet mon histoire n'est pas claire.

1ère étape : les personnes qui utilisent se fichier lorsqu'elle modifie une cellule de la colonne D à T elle doit la mettre en jaune la ou les cellules modifiées pour que je puisse les repérer.

2ème étape: elles mettent une X en D pour que je puisse faire un filtre sur la colonne.

Car ces modifs sont la pour mettre à jour notre base comptable qui est sur SAP.

D'ou l'intêret de mettre du jaune en premier lieux pour une X pour identifier les clients concernés.

J'ai décidé de faire appel au VBA car beaucoup de personnes oubliés de mettre du jaune ou de mettre des "X", sachant que chaque fichier fait en moyenne 900 lignes et 100 colonnes multiplié par 28 personnes ça fait beaucoup de cellules à contrôler.

Pensez-vous qu'il est possible de fusionner les 2 codes, cela me simplifierai énormément la vie.

Cordialement Samy

Tu peux commencer avec l'exemple joint.

Lorsqu'une cellule est modifiée dans la plage comprise entre les colonnes D et T, la cellule est coloriée en jaune et un "X" est noté dans la cellule correspondante en colonne C.

19exemple-1.zip (18.41 Ko)

A+

Exactement ça., est il possible d'y rajouter "Application.Calculate" lorsqu'on enregistre et on ferme la feuille.

Dés lors que je la reçois par mail le fichier, je suis sure que seul les cellules jaunes auront une belle petite X.

Imaginons que quelqu'un modifie une cellule est il s'aperçois qu'il ne fallait pas la modifier donc il l'enlève la couleur jaune.

C'est ma dernière question.

Est il possible d'y rajouter "Application.Calculate" lorsqu'on enregistre et on ferme la feuille.

Je ne vois pas bien l’intérêt de forcer le calcul à la fermeture du classeur. Ta feuille étant en mode de calcul automatique, le calcul se fera tout seul.

Sinon, tu peux placer ce code dans le module ThisWorkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.Calculate
End Sub

Imaginons que quelqu'un modifie une cellule est il s'aperçois qu'il ne fallait pas la modifier donc il l'enlève la couleur jaune.

Si l’utilisateur modifie une cellule et qu’il s’aperçoit qu'il ne fallait pas la modifier, il garde la possibilité de corriger sa saisie, puis enlever la couleur jaune et supprimer le "X".

L'intêret de cette requète était due aux oublis qu'ils pourraient faire en renseignant le fichier tellement de données à remplir.

J'ai mis le code dans "ThisWorkbook" cela ne fontionne pas, merci en tous les cas de m'avoir permis de finaliser ce bout de code.

C'est claire qu'en étant totalement novice dans ce monde qu'il me paraissait impossible d'y arriver seul.

Bonjour,

Je reviens vers toi si possible, car j'ai fais des tests avec mes collaborateurs qui utilisent se fichier.

Il s'avère qu'il serait utile que le code que tu m'as fais puisse enlever la X automatiquement si la personne enlève la couleur jaune.

J'ai suivi tes instructions en mettant le l'instruction "Application.Calculate" dans thisworkbook mais rien ne se passe.

Help me.

Bonjour,

Il faut que tu comprennes comment fonctionne la procédure.

Elle détecte une modification de la valeur des cellules (et non pas la couleur).

Si l’utilisateur modifie une valeur, la cellule est coloriée en jaune et un "X" est notée en colonne C.

Si l’utilisateur s’est trompé et qu’il corrige sa saisie, cette correction est interprétée comme une modification. L’effet est donc le même, la cellule est coloriée en jaune et un "X" est notée en colonne C.

En cas d’erreur de saisie :

Si l’utilisateur supprime la couleur de remplissage, la procédure évènementielle n’est pas lancée car la valeur de la cellule n’est pas modifiée.

Si l’utilisateur supprime le "X" en colonne C, la procédure évènementielle n’est pas lancée puisque cette cellule n’est pas incluse dans la plage de traitement.

L’utilisateur peut donc corriger la couleur et le marquage.

Si tu souhaites que cette opération soit facilitée, tu peux ajouter une procédure de réinitialisation qui va réaliser ces 2 actions (enlever le remplissage et le "X").

Voir l’exemple joint. Tu sélectionnes la cellule jaune et tu cliques sur le bouton "EFFACER JAUNE"

A+

Rechercher des sujets similaires à "aide fonction personnalisee vba"