Récupérer la valeur de l´unique cellule colorée d´une colonne [Résolu]

Signaler
Messages postés
18
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
12 avril 2006
-
Messages postés
32
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
3 août 2006
-
bonjour

je veux créer une FONCTION, où je selectionnerais une colonne
et la fonction me donnerait la valeur de la cellule qui est colorée en jaune dans cette colonne (je precise il n´y a qu´une seule cellule jaune dans la colonne) puis je fais une multiplication avec une autre cellule où je connais son adresse

comment faire ?
j´ai la macro suivante qui fonctionne
mais je voudrais une fonction

Sub Farbig()
Dim i As Integer
For i = 1 To 9
If Cells(i, 10).Interior.ColorIndex = 6 Then
Cells(11, 10).Value = Cells(i, 10).Value * Cells(10, 10).Value
End If
Next

End Sub


le probleme que je rencontre c´est en faisant Function Farbig (.......) as string
que mettre dans les parentheses pour dire que je puisse selectionner une colonne

merci

15 réponses

Messages postés
32
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
3 août 2006

Salut,
Maximo71 a raison avec son bouton. Une fonction qui change la valeur d'une autre cellule qu'elle mm ne pourra pas tourner. Donc c'est le bouton qui déclenche une sub et pas une fonction (et tu écris où tu veux) ou la fonction et le résultat sera écrit dans la fonction et pas ailleurs
Michael
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
32
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
3 août 2006

Salut,
(ByRef maSelection as Range) avec maSelection une sélection de cellule
et tu extraits ta colonne par
maColonne=maSelection .Row (ca marchera si tu as bien une ou plusieurs cellules mais sur une mm colonne
Sinon pourquoi tu ne mets pas juste un (ByVal maColonne as Integer) et quand tu l'appelles via une Worksheet, tu peux mettre
=Farbig(Column(A1)) ou Colonne(A1) en français ?

Le prob va etre le suivant: depuis une fonction, tu ne peux pas modifier une cellule (hors celle qui continet la fonction )donc ton code devra changer en:
'elle retournera 0 si elle trouve pas
Function Farbig(ByVal maColonne As Integer) as Long
Dim i As Integer

For i = 1 To 9
If Cells(i, maColonne ).Interior.ColorIndex = 6 Then
Farbig(11, maColonne ).Value = Cells(i, maColonne ).Value * Cells(10, maColonne ).Value
exit function
End If
Next

End Function
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

function Farbig as long





for each c in range("J1:J9")

If c.interior.ColorIndex = 6 then

cells(11,10).value = c.value * cells(10,10).value

exit for

end if

Next c



end function



Test ce qui est au dessus, dit moi si cela convient par un petit message et en validant la réponse merci




MAXIMO71
PS Si la réponse vous satistait
pensez à la valider
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Re

A quoi ca sert de reposer la même question 2 Fois......

http://www.vbfrance.com/infomsg/FORMULE-EXCEL-PERMETTANT-RECONNAITRE-COULEUR-CELLULE-5_708989.aspx

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
18
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
12 avril 2006

salut micmerle merci beaucoup pour ton aide, effectivement ca renvoie zero, je ne comprends pas exactement pourquoi

merci aussi maximo, dans ton script l´utilisateur ne peut pas choisir la colonne ? et lorsque je teste ca, ca ne renvoie aucune valeur

vous pouvez m´aider
merci
Messages postés
18
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
12 avril 2006

certes c´est peut etre la meme question, d´ailleurs tu m´as bien aidé, je t´en remercie, mais je reexprime ma demande sous d´autres termes
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Re,

Si tu Expliques bien dès le début ton problème tu porras avoir une réponse claire...
"reexprime ma demande sous d´autres termes"...
Pourquoi ne pas l'avoir fait avant... tu aurais pu penser aux gens qui lisent et dépensent de leur temps (même si ils ne le sont pas obligés) à essayer de résoudre ton problème

Enfin bref.

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
Messages postés
18
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
12 avril 2006

jsuis desolé, mais c´est en utilisant le code que tu m´avais ecrit, que j´ai vu que je bloquais donc c´est la raison de ce nouveau post
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

Function Farbig() As Long





For Each c In Selection

If c.Interior.ColorIndex = 6 Then

col = c.Column

Cells(11, col).Value = c.Value * Cells(10, col).Value

Exit For

End If

Next c



End Function



J'insiste mais ici tu selectionnes une colonne celle que tu veux et tu lance ta macro qui contient la fonction

MAXIMO71
PS Si la réponse vous satistait
pensez à la valider
Messages postés
18
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
12 avril 2006

Je viens de tester ce que tu m´as proposé mais ca ne fonctionne toujours pas. Je ne comprends pas ce que tu veux dire par "lancer la macro". car en enregistrant le code que tu me proposes j´obtiens une fonction et non une macro. donc ´je selctionne ma colonne, puis je lance ma fonction mais j´obtiens toujours 0. ce qui ne correspond pas au resultat de mon operation
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

La fonction est elle présente dans une macro car dans une de tes demande, tu demandais une fonction.

Si tu veux la tester je te la donne sous forme de macro



Sub test25()

Farbig

End Sub





Function Farbig() As Long





For Each c In Selection

If c.Interior.ColorIndex = 6 Then

col = c.Column

Cells(11, col).Value = c.Value * Cells(10, col).Value

Exit For

End If

Next c



End Function





Tu selectionnes une colone dans laquelle il y a une case jaune qui
contient une valeur et une valeur dans la case 10, tu lance la macro
test25 et tu obtiendras le résultat de la multiplication dans la case
11. J'attire ton attention sur une évidence mais bon parfois, il
faut que tes cases contiennent des valeur numériques et pas du texte,
je sais c'est une évidence mais j'ai parfois bloqué pour moins

MAXIMO71
PS Si la réponse vous satistait
pensez à la valider
Messages postés
18
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
12 avril 2006

Salut Maximo71
merci beaucoup pour ton aide, j´ai maintenant compris comment ca fonctionne. c´est parfait. Je suis loin d´etre un expert en programmation, et ca me fait toujours plaisir d´avoir de l´aide

j´aurais une autre question:
avec cette macro je ne peux selectionner qu´une colonne puis je lance la macro et j´obtiens le resultat. Maintenant si je dois effectuer cette operation sur plusieurs colonnes, existe t´il une possibilité pour que je sélectionne des le debut 5, 6 voire plusieurs colonnes et en lancant la macro j´obtiendrai le resultat pour toutes mes colonnes ?

Deuxieme question:
Au debut j´avais imaginé faire en sorte que toute les cellules de la ligne 11 soient dotées d´une "fonction" c´est a dire genre

= Si de la ligne 1 à 9 il y a une case jaune, je prends sa valeur et je la multiplie par la valeur de la ligne 10
ainsi il serait surement possible d´avoir des valeurs actualisées de mon calcul lorsque je modifie la valeur de ma cellule jaune
est ce que tu me comprends ? et donc je voulais savoir si ca serait envisageable ?

merci
bonne journee
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

La fonction utilise la selection comme zone de recherche, donc
normalement si tu en selectionnes plusieurs cela devrait fonctionner.
Autrement, tu peux définir la zone de recherche en utilisant un objet
range du genre Range("A1:J9") pour tester toutes les cases de la plages
A1 à J9, écrit de cette façon, la plage selectionnée correspond à A1
comme cellule en haut à gauche et J9 comme cellule en bas à droite, il
y a d'autre façon de faire mais celle ci est simple et te permet
d'appréhender les objets Range. Je te redonne le code modifié:



Sub test25()

Farbig

End Sub





Function Farbig() As Long





For Each c In Range("A1:J10") 'A correspond à la colone la plus à gauche que tu veux tester et J la plus à droite.

If c.Interior.ColorIndex = 6 Then

col = c.Column

Cells(11, col).Value = c.Value * Cells(10, col).Value

Exit For

End If

Next c



End Function


Pour ce qui concerne ton idée de formule du type =...., il n'est pas
possible de les utiliser dans ce cas car elles ne permettent pas de
tester autre chose que la valeur de la cellule (pas de mise en forme).
En revanche, tu peux mettre un bouton de commande dans ta barre de
bouton en utilisant outil/personnaliser/commande/macro. Cela
simplifiera l'utilisation de ta Macro.

Je dois vérifier quelque chose sur le site et je te donne plus d'éléments pour te simplifier la vie.



A+ et n'hésite pas à poser des questions mais fais attention quand on
met le doigt dans le developpement même à petit niveau, rien ne plus
t'arréter.

Dernier petit détail, peux tu valider la réponse, merci


MAXIMO71
PS Si la réponse vous satistait
pensez à la valider
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

C'est re moi pour te simplifier la manipulation de la Macro tu peux
créer un bouton sur ta feuille de calcul avec la barre d'outil Visual
Basic tu met un bouton sur ta feuille et clique droit pour visualiser
le code puis tu écris directement le code dans le bouton que tu crées.



Voila en espérant que tu vas tout comprendre et que tu vas atteindre ton objectif.

MAXIMO71
PS Si la réponse vous satistait
pensez à la valider
Messages postés
18
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
12 avril 2006

salut
j´ai testé ton code, et la modification ne change rien au resultat, c´est a dire que je n´obtiens le resultat de la multiplication uniquement pour la derniere colonne de ma selection.
j´ai tenté de modifier ton code, avec celui ci-dessous

Function couleur() As Long

Dim nbcol As Integer
Dim colo As Integer
nbcol = Worksheets(1).UsedRange.Columns.Count

For colo = 1 To nbcol

For Each c In Range(Cells(1, colo), Cells(9, colo)) 'A correspond à la colone la plus à gauche que tu veux tester et J la plus à droite.
If c.Interior.ColorIndex = 6 Then
col = c.Column
Cells(11, col).Value = c.Value * Cells(10, col).Value
Exit For
End If
Next c
Next colo

End Function

c´est a dire que pour chaque colonne je demande a faire la multiplication. D´apres mes premiers essais ca a l´air de fonctionner.
merci beaucoup pour ton aide. je n´ai pas beaucoup de connaissance en informatique mais c´est vrai que la logique informatique ca m´interesse et c´est aussi utile pour mon boulot.

autre chose: pour le bouton raccourci macro, c´est parfait.

ciao