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 23/11/2011, 00h10   #1
Candidat au titre de Membre du Club
 
Homme David
profession libérale
Inscription : octobre 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : profession libérale
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 28
Points : 13
Points : 13
Par défaut pb avec référence activecell

Bonsoir,
voici une fonction de comptage de cellules qui pemet de compter des cellules d'une zone donnée en fonction de la couleur donnée par BgColor1 et de la valeur d'une cellule dont on détemine l'emplacement en comptant le nombre de colonnes qui sépare la cellule dans laquelle on va placer la fonction et une autre cellule ;
le problème, c'est qu'avec activecell, j'ai une formule qui fonctionne uniquement si je suis placé sur la case de la formule. La 2ème formule donne la solution : il faut créer une variable range en plus.
La question est de savoir s'il y a moyen de référencer la cellule dans laquelle on place la fonction sans avoir à créer une variable pour cela.
NB: il y a plus de détail sur une question nommée Pb avec offset qui m'avait permis de finir cette formule, mais a soulevé ce pb.
Merci d'avance.
Code :
1
2
3
4
5
6
7
8
9
'compte cellules avec une couleur de fond en fonction du jour de la semaine : cette formule fonctionne
Function ColorCountFctJSemAuto(SearchArea As Object, BgColor1 As Range, NJour As Range, Jsem As Integer) As Integer
Application.Volatile True
ColorCountFctJSemAuto = 0
MaCoul1 = BgColor1.Interior.ColorIndex
For Each cell In SearchArea
     If cell.Interior.ColorIndex = MaCoul1 And cell.Offset(0, (NJour.Column - ActiveCell.Column)).Value = Jsem Then ColorCountFctJSemAuto = ColorCountFctJSemAuto + 1
Next cell
End Function
Code :
1
2
3
4
5
6
7
8
9
'compte cellules avec une couleur de fond en fonction du jour de la semaine : cette formule fonctionne
Function ColorCountFctJSemAuto(SearchArea As Object, BgColor1 As Range, NJour As Range, CasFct as Range, Jsem As Integer) As Integer
Application.Volatile True
ColorCountFctJSemAuto = 0
MaCoul1 = BgColor1.Interior.ColorIndex
For Each cell In SearchArea
     If cell.Interior.ColorIndex = MaCoul1 And cell.Offset(0, (NJour.Column - CasFct.Column)).Value = Jsem Then ColorCountFctJSemAuto = ColorCountFctJSemAuto + 1
Next cell
End Function
darkvadave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 21h50   #2
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

Oui c'est possible

Code :
1
2
3
4
5
6
Function Essai()
Dim TheCell As Range
Set TheCell = Application.Caller
 
Essai = TheCell.Column
End Function
++
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 25/11/2011, 15h18   #3
Candidat au titre de Membre du Club
 
Homme David
profession libérale
Inscription : octobre 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : profession libérale
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 28
Points : 13
Points : 13
Merci pour l'info,
mais quand on inclus la formule dans la fonction, ça pose un problème de référence circulaire et ça ne fonctionne pas (de même, si on ajoute la fonction essai() dans le module de la feuille excel et qu'on utilise cette fonction dans la fonction initilale, on a encore un pb de référence circulaire).
Donc, à moins de contourner ce pb, le mieux reste de créer un paramètre supplémentaire ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
'compte cellules avec une couleur de fond en fonction du jour de la semaine
Function ColorCountFctJSemAuto(SearchArea As Object, BgColor1 As Range, NJour As Range, Jsem As Integer) As Integer
Dim TheCell As Range
Set TheCell = Application.Caller
Application.Volatile True
CaseFct = Application.Caller
ColorCountFctJSemAuto = 0
MaCoul1 = BgColor1.Interior.ColorIndex
For Each Cell In SearchArea
     If Cell.Interior.ColorIndex = MaCoul1 And Cell.Offset(0, (NJour.Column - TheCell.Column)).Value = Jsem Then ColorCountFctJSemAuto = ColorCountFctJSemAuto + 1
Next Cell
End Function
darkvadave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 18h06   #4
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
Une ref circulaire?? à quel endroit?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Function ColorCountFctJSemAuto(SearchArea As Range, BgColor1 As Range, NJour As Range, Jsem As Integer) As Integer
Dim TheCell As Range, Cell As Range
Dim MaCoul1 As Long
Set TheCell = Application.Caller
Application.Volatile True
'CaseFct = Application.Caller
ColorCountFctJSemAuto = 0
MaCoul1 = BgColor1.Interior.ColorIndex
For Each Cell In SearchArea
     If Cell.Interior.ColorIndex = MaCoul1 And Cell.Offset(0, (NJour.Column - TheCell.Column)).Value = Jsem Then ColorCountFctJSemAuto = ColorCountFctJSemAuto + 1
Next Cell
End Function
Mise a part les déclarations qui manquent et le CaseFct = Application.Caller qui est inutile, je ne vois pas de soucis avec ton code, il fonctionne parfaitement chez moi.

Si le problème persiste fait nous passer un fichier démo.

++
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 26/11/2011, 10h26   #5
Candidat au titre de Membre du Club
 
Homme David
profession libérale
Inscription : octobre 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : profession libérale
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 28
Points : 13
Points : 13
Par défaut résolu

Merci Qwazerty,
ça fonctionne.
darkvadave est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h31.


 
 
 
 
Partenaires

Hébergement Web