Problème exécution code VBA avec plusieurs conditions

Bonjour à tous,

J'aimerais exécuter un code VBA qui me permettrait d'afficher sur une colonne de cellules des données d'une autre colonne uniquement s'il a une couleur spécifique.

Plus concrètement, voici ce que je voudrai faire dans le fichier que j'ai joint :

J'aimerais, que dans la colonne B141 à B188, Excel m'affiche les valeurs de la colonne E8:E122 si et seulement si la couleurs des cellules E8:E122 est verte olive (code de la couleur : RGB(235, 241, 222) ). Si toutefois, la cellule viendrait à être changée de couleur, j'aimerais qu'Excel m'efface la valeur de cette cellule dans la colonne B141 à B188.

J'ai essayé ceci comme code:

Sub Factu()
Sheets("Facturation").Select
If Range(E8, E122).Font.Color = RGB(235, 241, 222) Then
Range(B141, B188) = Range(E8, E122)
End If

End Sub

mais ça ne marche pas car :

image

auriez vous une idée de l'erreur dans mon code? ou dans mon fichier ?

Je vous remercie d'avance pour votre aide!

8code-vba.xlsm (54.45 Ko)

Bonjour,

Il y a 3 problèmes : un problème de syntaxe avec les range, un petit problème car .font.color correspond à la police alors que vous cherchez (si j'ai bien compris) .interior.color et enfin les tailles des 2 plages sont différentes ! Peut-être qu'il manque un critère ?

Voici le code tel que je le vois (il reste à compléter) :

Sub Factu()
With Sheets("Facturation")
    for each cell in .Range("E8:E122")
        if cell.interior.Color = RGB(235, 241, 222) Then
            'code à définir
        End If
    next cell
end with
End Sub

PS : pour poster du code, vous pouvez utiliser les balises </> du ruban d'icônes.

Cdlt,

Bonjour,

Je vous remercie de votre réponse. Je vois mieux mes erreurs. Toutefois, j'aimerais rajouter une condition:

Si les cellules de la colonne E8:E122 ont la couleur verte olive et que si la colonne A8:A122 a exactement le même contenu que la colonne A141:A172, alors B141:B172 affiche les contenus vert olive de la colonne E8:E122.

Exemple :

Si dans la colonne en question il y a écrit LARA, et que sa date d'anniversaire est écrite en vert olive, et que plus bas il y a également écrit LARA, je voudrais qu'à côté Excel m'affiche sa date d'anniversaire. Par exemple, s'il y a écrit LEA, que sa date d'anniversaire n'est pas écrite en vert olive, plus bas, à côté de la cellule LEA, il faudrait qu'elle reste vide.

Est-il faisable de faire cela sur VBA? Si oui, je dois d'abord terminer ma première boucle If, c'est bien cela?

Je vous remercie d'avance

Cdt

Ca parait plus clair avec une seconde condition !

Oui en VBA c'est possible mais je ne sais pas si c'est la meilleure solution. A quoi correspond la couleur vert olive ? Au résultat d'une valeur non ?

Car il est possible d'obtenir ce que vous cherchez par formule, ce serait peut-être mieux. En général, je dirais qu'il vaut mieux éviter d'utiliser les couleurs comme un paramètre (un critère). Les couleurs ne sont pas destinées à être traitées comme de l'information, elles servent juste à la mettre en évidence.

Il est vrai que la couleur n'est pas la meilleure solution. Toutefois celle-ci ne correspond pas à une formule mais ce sont des chiffres bruts. Concrètement, la couleur vert olive correspond au fait que les factures ne sont pas payées. Et ce que je souhaiterais justement faire avec ce code VBA, c'est de résumer en bas de ma feuille toutes les factures pas payées par X ou Y. Et si jamais je passe cette ligne en vert foncé, cela voudrait dire que cette facture est payée, et qu'Excel la supprime automatiquement de mon tableau récapitulatif en bas.

Re,

J'ai essayé de regarder votre fichier mais je ne parviens pas à l'ouvrir.

Voici donc un essai par formule, "à l'aveugle" :

 =SOMME.SI.ENS($E$8:$E$122;$A$8:$A$122;$A141)

On renvoie le total restant dû si j'ai bien compris où on a les noms des clients en A et les créances en E, et les noms de clients sans doublon cette fois à partir de A141.

Sinon, joignez un fichier allégé avec quelques lignes pour l'exemple et le résultat souhaité.

Cdlt,

Re,

Merci, je vais essayer cette formule !

Peut-être arriveriez vous à ouvrir ce fichier ?

4code-vba.xlsx (49.61 Ko)

Oui, ça a marché cette fois.

Il ne faut pas fusionner de cellules lorsqu'on utilise Excel, c'est contraire au principe du tableur. Donc dans un premier temps, je dirais qu'il faut tout défusionner, et mettre les données sous forme de tableau structuré.

Ensuite, je ne comprends pas la colonne E (il n'y a que des Y). Comment sait-on sur le fichier si une facture a été réglée ? Normalement, on a une colonne avec les montants TTC et on a une colonne (éventuellement plusieurs) avec les règlements, pour obtenir un solde dans une dernière colonne. C'est le solde (<=0) qui permet savoir que la facture est réglée.

Bonjour,

Je note pour le fusion et je règle tout ceci!

Ensuite, concernant le règlement des factures, malheureusement, cela est fait manuellement. Sur un autre logiciel, je vérifie si le client en question a payé le montant de la facture, et là je met la ligne en vert foncé. Chaque client a plusieurs factures à payer. D'où mon intention initiale de réaliser un code VBA avec les couleurs.

Toutefois, à lire votre message, j'ai une autre idée, je pourrais rajouter une colonne avec une formule qui diminue le montant initialement prévu de toutes les factures moins ce qui a été facturé. Cependant, c'est une formule manuelle, cela voudrait dire que je dois changer la formule quand je passe la ligne d'une autre couleur.

qu'en pensez vous?

Bonjour,

Un autre logiciel ? Comptable ? Parce que les logiciels prévoient en général un lettrage des écritures qui permet directement de savoir ce qui a été soldé ou non.

Je n'ai pas compris ce que vous entendiez par "formule manuelle".

Ce que je pense, c'est qu'il ne faut utiliser les couleurs (via une MFC) que pour mettre en évidence les factures réglées (par exemple). Mais déterminer celles qui sont réglées et celles qui ne le sont pas, il faut le faire directement sur le logiciel (c'est la pratique courante) ou sinon sur Excel, par formules.

Bonjour,

Effectivement, le logiciel comptable peut nous le dire, mais le document Excel faisait office de "synthèse" d'où la volonté de mettre en évidence avec les couleurs un code dynamique VBA. Ainsi, qd je vois qu'une facture est lettrée sur la compta, je le met en vert foncé. Sinon, je le laisse en vert olive.

Je comprends que ce n'est pas une tâche facile, donc

Bonjour,

Non, je vous demandais ça car vous pouvez extraire des écritures faisant apparaitre le lettrage. Vous pouvez même extraire les écritures non lettrées uniquement. Donc c'est un faux problème. Il faut approfondir la connaissance du logiciel comptable pour régler ça en amont : ça évite la double tâche .

Cdlt,

Ok, donc vous ne conseillez pas VBA pour ce genre de missions?

Merci!

Tout dépend du problème posé mais j'ai l'impression que vous pourriez obtenir directement les lignes non soldées à partir de votre logiciel, ce qui résoudrait directement le problème. Mais ça ne veut pas dire que vous ne pouvez pas utiliser VBA pour faire autre chose par la suite.

Je vous explique plus en détail mon problème :

Nous avons un certain nombre de clients. Avec ces mêmes clients, nous avons signé avec chacun un contrat qui indique le montant qu'on lui facturera cette année. Exemple :

- Carrefour : Minimum garanti à payer de 200 000 dollars, en 4 fois à chaque trimestre

- Starbucks: Minimum garanti à payer de 150 000 dollars, en 2 fois à chaque semestre,

- Coca Cola: minimum garanti à payer de 75 000 dollars, en une fois.

etc.

Ainsi, le tableau récapitulatif ne fait que de regrouper les données de chaque contrat, ce sont des chiffres bruts tirés directement des données légales. Ainsi, chaque mois, j'extrais la comptabilité et je met à jour mon tableau récapitulatif avec des couleurs (rouge: pas payé, vert foncé: payé, etc).

Parfois, il y a des loupés, on oublie de facturer un client. Ou bien on ne sait pas ce qu'il nous reste à facturer mais nous devons le savoir pour prévoir des achats de couverture de change de X ou Y montants (ex: on achète sur la salle des marchés 4 milliards de dollars à un taux de 1.15, car le tableau nous a dit qu'il nous restait environ 4 milliards à facturer/ à payer). D'où le tableau de synthèse que je souhaite créer à l'aide de VBA. Le logiciel de comptabilité me donnera effectivement ce qu'on a facturé; mais pas ce qu'il nous reste à facturer.

J'espère que c'est plus clair à présent.

Qu'en pensez vous?

Je ne sais pas bien quoi penser, je répondais sur la question des règlements. Et ca ne change rien à la facturation finalement, qui, lorsqu'elle est manquante, n'apparaitra pas sur le logiciel.

Ce qu'il faut c'est une continuité de l'information qui permette un bon suivi. Des propositions de contrats qui deviennent (ou pas) des contrats qui engendrent des factures (parfois corrélées à l'avancement de la mission), celles-ci appelant des règlements.

Donc, il faut bien gérer la pré-facturation, c'est essentiel. Et ensuite, on facture, on saisit, et le logiciel comptable permet de savoir si on encaissé ou si on doit relancer.

Rechercher des sujets similaires à "probleme execution code vba conditions"