Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Utilisation du nom d'une colonne comme paramètre d'une fonction personna

  • Initiateur de la discussion Initiateur de la discussion Narsil54
  • Date de début Date de début

Narsil54

XLDnaute Nouveau
Bonjour à tous,

J'ai un soucis lors de l'utilisation de fonctions personnalisées développées en VBA.

Je veux développer une feuille de calcul qui fera les mêmes calculs sur toutes les lignes, avec une caractéristique calculée ou donnée par colonne.
Les calculs seront nombreux, et pour que l'utilisateur puisse comprendre facilement comment ces calculs fonctionnent, je cherche à nommer les cellules pour rendre les formules plus lisibles.

Mettons que la colonne A contienne une liste de températures.
Je n'ai pas trouvé de moyen automatique de nommer la cellule A1 "Temperature1", la cellule A2 "Temperature2", etc... Je peux avoir un nombre très important de lignes, il n'est donc pas envisageable pour moi d'aller les nommer une par une à la main.

Je me suis donc penché sur l'option de nommer les colonnes. Je nomme la première colonne "Temperature". Dans une autre colonne (colonne B par exemple), si je fais un traitement "basique" en m'appuyant sur le nom "Temperature", ça fonctionne très bien.
Par exemple, Temperature*2, ou un test SI (Temperature<200; ... ) etc. : quand je duplique la formule vers le bas, le calcul dans chaque cellule de B prends la valeur dans la ligne qui lui correspond dans la colonne A. La correspondance en ligne fonctionne donc bien.

Par contre, ça coince quand j'utilise des fonctions personnalisées développées en VBA. J'en ai beaucoup, qui sont toutes indépendants de la feuille de calcul : elles prennent un ou plusieurs arguments en paramètre et renvoient une valeur.

Lorsque je passe le nom de la colonne "Temperature" en paramètre de ces fonctions personnalisées, excel me renvoie une erreur de valeur.

Pourquoi ça ne fonctionne pas, et comment faire pour que ça fonctionne ?

Merci d'avance,
 

VDAVID

XLDnaute Impliqué
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

Bonjour Narsil,
Je pense qu'il faudrait une pièce jointe (sans données confidentielles) pour pouvoir t'aider.
Car comme ça, ton problème parait un peu flou ^^
A+
 
C

Compte Supprimé 979

Guest
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

Bonjour,

Ou un bout de code de ta fonction serait le bienvenue

A+
 

Narsil54

XLDnaute Nouveau
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

C'est vrai que le problème est pas évident à expliquer.
Voilà ma feuille test. La fonction en question est toute bête, mais son principe est le même que les fonctions plus compliquées que je veux utiliser.

Ce que je ne comprends vraiment pas dans cette feuille c'est que la colonne B fonctionne nickel mais pas la colonne D...

Merci d'avance,
 

Pièces jointes

  • Test_noms_colonnes.xls
    31.5 KB · Affichages: 85
C

Compte Supprimé 979

Guest
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

RE,

Pourquoi ça ne fonctionne pas, et comment faire pour que ça fonctionne ?
Dans ta formule : =Fois2(A2) tu ne fais appel qu'à une seule cellule donc le calcul se fait
Dans ta formule : =Fois2(Temperature) tu fais appel à une plage ta fonction plante sur la 1ère ligne qui est du texte
Mais même en changeant la plage du nom, le calcul ne pourra pas se faire

J'ai trouvé, il faut utiliser l'adresse de la cellule appelante
Code:
Function Fois2Spé(Rng As Range) As Long
  Fois2Spé = Cells(Range(Application.Caller.Address).Row, Rng.Column) * 2
End Function

A+
 
Dernière modification par un modérateur:

VDAVID

XLDnaute Impliqué
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

Re Narsil, Bonjour Bruno,
Je ne vois pas comment faire non plus pour que ta formule marche.
Par contre, pour ce qui est du problème que tu viens d'évoquer :

Pour ça tu peux Utiliser le code suivant :
PHP:
Sub Macro1()
'
' Macro1 Macro
'
Dim i&
For i = 1 To 500 Step 1
j = i - 1

If Range("A" & i).Value <> "" Then
    Range("A" & i).Select
    ActiveWorkbook.Names.Add Name:="Temperature" & j, RefersToR1C1:=Range("A" & i).Value
    ActiveWorkbook.Names("Temperature1").Comment = ""
 
    End If
       Next
End Sub
Ce code va te nommer automatiquement toutes les cellules en A sur ton document en fonction de leur numéro de lignes. Tu peux faire jouer les numéros en changeant la variable j.
En espérant que cela te serves !
A+
 

Staple1600

XLDnaute Barbatruc
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

Bonsoir le fil

Une variante "raccourcie" de la macro de VDAVID

Code:
Sub a()
Dim c As Range, i&
For i = 1 To 10 ' adapter ici selon besoin
Set c = Cells(i, 1): c.Name = "Temperature" & i
Set c = Nothing
Next i
End Sub

EDITION: Bonsoir BrunoM45
Je n'en doute pas

J'ai vu le code de VDAVID, j'ai pensé à une variante allègée, j'ai posté.

J'avais bien lu ta proposition, mais n'y trouvant rien à y ajouter ou à modifier, je n'ai point posté à son sujet.
 
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

Bonsoir Bruno,
Je n'en doute pas ! ^^
J'ai envoyé mon message peu après ton EDIT, je n'avais pas vu que tu avais trouver la solution
PS : Bonsoir Staple, on sent le code du MEGA barbatuc qui est effectivement beaucoup plus simple
Bonne nuit
 

Narsil54

XLDnaute Nouveau
Re : Utilisation du nom d'une colonne comme paramètre d'une fonction personna

Super merci à vous !

Je m'en vais tester ça et également voir si l'une ou l'autre des solutions est envisageable au niveau du temps de calcul.
 

Discussions similaires

Réponses
4
Affichages
444
Réponses
16
Affichages
918
  • Question Question
Réponses
2
Affichages
270
Réponses
5
Affichages
395
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…