Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 16h48   #1
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut reference a une cellule dans une fonction

bonjour a tous


en aidant plusieur forumeur sur diverses question

je me pose une question sur comment référencer une cellule

j'explique:


a suposer que je créé une fonction exemple "mafonction"

et je la met dans une cellule exemple "=Mafonction"


dans la fonction elle meme n'ya t-il pas un moyen de référencer cette cellule

du genre "thiscells"

exemple d'utilisation

Code :
1
2
3
4
5
6
7
public function mafonction()
 dim cel1 as range,cel2 as range,cel3 as range
 
cel3=thiscell 'designe la cellule ou est inscrite "=mafonction"
 
mafonction=cel3.offset(0,-2)-cell3.offset(0,-1)'bien sur ca n'est pas l'operation qu'il y aura c'est juste un exemple 
end function
il va y avoir plusieurs cellule qui auront cette fonction


une idée ?????

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 16h57   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 847
Points : 16 847
Envoyer un message via Skype™ à bbil
Tiens une fonction qui te permettra d'y voir plus clair
Code :
1
2
3
4
5
Function MaFonction() As String
Dim r As Range
Set r = Application.Caller
    MaFonction = r.Address
End Function
mais attention aux limites des fonctions personnalisés d'Excel :

http://support.microsoft.com/kb/170787/fr


bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 17/08/2011, 17h04   #3
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour bbil

si je comprend bien pour ma fonction je n'est besoins que de ca
Code :
Set r = Application.Caller
si je met cette fonction dans plusieur cellule n'y a t-il pas des risque de redondance????

je te remercie

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 17h13   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 847
Points : 16 847
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par patricktoulon Voir le message
...
si je met cette fonction dans plusieurs cellules n'y a t-il pas des risque de redondance????
..
je vois pas ce que tu veux dire...
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 17h50   #5
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
re je fesais allusion au fait que plusieurs cellules aurnt cette fonction
donc n'y a t-il pas un risque que la cellule soit mal identifiée

voila l'ebauche de ma fonction

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Public Function difftemps() 
Dim S As Long, H As Long, M As Long
Dim cellule As Range
Set cellule = Application.Caller
 S = DateDiff("s", r.Offset(0, -2), r.Offset(0, -1))
    H = Int(S / 3600)
    M = Int((S - 3600 * H) / 60)
    S = S - 3600 * H - 60 * M
        durrée = TimeSerial(H, M, S)
    difftemps = durrée
End Function
 
mais ca me marque "?NOM":aie:
heu!!...... moi pas comprendre

EDIT!!!!!!!!!

oupss j'ai oublé de changer le nom de variable
voici le bon code j'ai meme ajouter un e condition

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function difftemps()
Dim S As Long, H As Long, M As Long
Dim cellule As Range
 
Set cellule = Application.Caller
 If cellule > cellule.Offset(0, 1) Then
 S = DateDiff("s", cellule.Offset(0, -2), cellule.Offset(0, -1))
  ElseIf cellule < cellule.Offset(0, 1) Then
  S = DateDiff("s", cellule.Offset(0, -1), cellule.Offset(0, -2))
 End If
 
    H = Int(S / 3600)
    M = Int((S - 3600 * H) / 60)
    S = S - 3600 * H - 60 * M
        'durrée = TimeSerial(H, M, S)
    difftemps = H & ":" & M & ":" & S
End Function
je suis en train de realiser cette fonction pour "lyonnaisdu26" je trouvait le sujet interressant
un peu d'aide me serait grand utile je crois

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 23h45   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 847
Points : 16 847
Envoyer un message via Skype™ à bbil
Je n'ai pas tous relu .. mais dans ton cas Application.Caller ne me semble pas intéressante .. il vaudrait mieux donner 2 paramètres à ta fonction du genre :

Code :
Public Function difftemps( rDateDeb as range, rDateFin as range )
ces histoire d'Offset qui oblige à ce que la formule soit placé dans une positon définie en fonction de ces paramètres c'est pas la joie ...
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 07h26   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
J'ai lu en diagonal mais juste un détail, la fonction placée dans une cellule a pour but de modifier le contenu de celle ci. Donc quel pourrait bien être l’intérêt de connaitre le contenu de ta cellule à l’intérieur de la fonction quelle contient?
Le code va en effet se mordre la queue, tu cherches à modifier un contenu en prenant ce contenu comme base. Tu crées donc une ref circulaire en faisant cela.
L’intérêt de Caller à mon sens est plus de connaitre par exemple les coordonnées ou des caracteristiques de la cellule.
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/08/2011, 14h14   #8
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour bill et qwazerty

oui j'avais penser a ajouter les référence au cellule

il faudra alors mettre dans la cellule par exemple

ça me permettrait finalement de ne pas utiliser le "application.caller"

qwazerty :c'est de ca que je parlais quand je parlais de redondance

mais finalement je vais adopter la solution de bill

merci a tout les deux


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h22   #9
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 847
Points : 16 847
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par patricktoulon Voir le message
...
il faudra alors mettre dans la cellule par exemple

...
point-virgule (;) pas deux points (:)
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h37   #10
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

oui j'avais un doute merci

je viens de comprendre la reaction de qwazerty

par erreur dans la fonction je met

"if cellule > que " alors que je voulais dire " if cellule.offset(0.2)je me sert donc bien de la reference (address)

voila le code final pour le moment mais j'ai un petit souci avec le vice et versa
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Public Function difftemps() As String
Dim S As Long, H As Long, M As Long
Dim cellule As Range
 
Set cellule = Application.Caller
 
 S = DateDiff("s", cellule.Offset(0, -2), cellule.Offset(0, -1))
 
    H = Int(S / 3600)
    M = Int((S - 3600 * H) / 60)
    S = S - 3600 * H - 60 * M
 
  If Left(cellule.Offset(0, -2).Value, 2) < Left(cellule.Offset(0, 1).Value, 2) Then
    difftemps = H + 24 & ":" & M & ":" & S
Else
difftemps = H + 24 & ":" & M & ":" & S
End If
End Function
et voila selon ton idée
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Public Function difftemps(cel1 As Range, cel2 As Range) As String
Dim S As Long, H As Long, M As Long
 
 S = DateDiff("s", cel1, cel2)
 
    H = Int(S / 3600)
    M = Int((S - 3600 * H) / 60)
    S = S - 3600 * H - 60 * M
 
 
  If Left(cel1, 2) < Left(cel2, 2) Then
    difftemps = H + 24 & ":" & M & ":" & S
Else
difftemps = H + 24 & ":" & M & ":" & S
End If
End Function

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h00.


 
 
 
 
Partenaires

Hébergement Web