Comment convertir la cellule B3 en Cells(2,3)

Cire -  
 Cire -
Bonjour,

Comment passer en parametre en VBA sous Excel la référence d'une cellule, soit par exemple B3, et convertir ce B3 en Cells(2,3)?

Soit dans le code suivant:

Function asom()

Dim feuille As Integer

feuille = ActiveSheet.Index

If feuille = 1 Then
asom = ThisWorkbook.Sheets(feuille).Cells(1, 1)
Else
asom = ThisWorkbook.Sheets(feuille - 1).Cells(1, 1)
End If

Je veux passer B3 en param. et obtenir dans l'instruction ThisWorkbook.Sheets(feuille - 1).Cells(L, C) où L = 2 et C = 3

Merci de votre précieuse aide. Je fais mes premiers pas en VBA!

Cire

End Function
A voir également:

3 réponses

Fada09 Messages postés 1741 Statut Contributeur 545
 
Salut,
Bon tout d'abord si tu veux passer des paramètres à ta function il faut lui dire donc ton entête n'est pas bonne.

Par exemple si il fallait passer une chaine de caractere et récupérer en retour un entier la fonction doit ressembler a cela.
Function nom_de_la_fonction(toto as string) as integer

Bon je suis pas sur de t'avoir aidé mais bonne chance

;-)
~ ~ Fada ~ ~ : Member of Star!alco
0
Cire
 
Merci Fada09,

C'est une partie de la réponse, je savais pas comment recevoir une chaine de caractère en param.

Cela dit, en VBA il y a une méthode (où quelque chose du genre) qui s'appel Cells( ligne, collone) comment convertir mon param. (B3) en ligne et collone (3,2) pour pouvoir l'utiliser dans la méthode Cells( ligne, collone) ?

Merci beaucoup

Cire
0
DaNot Messages postés 221 Statut Membre 163
 
Salut,

Il existe deux propriétés de l'objet Range : la propriété Row & Column.

Donc, pour ce problème, il suffit de déclarer une variable locale de type Range et de l'initialiser avec l'argument. Je m'explique :

Function Somme(aCell As String) As Long
    Dim lCell As Range
    
    lCell = Range(aCell)
    
    ThisWorkbook.Sheets(feuille).Cells(lCell.Row, lCell.Column) = _
        ThisWorkbook.Sheets(feuille - 1).Cells(lCell.Row, lCell.Column)
    
End Function


Encore mieux, tu declares directement une fonction recevant un argument de type Range.

DaNot
0
Cire
 
Merci DaNot

Ca fonctionne bien, j'utilise argument de type Range et tout va bien.

Il me reste un autre petit problème, mais je crois que je vais écrire un autre message. Toute fois, voici de quoi sagit t-il?

Ma fonction se met a jour seulement si je vais sur la cellule qui utilise cette fonction et que je pèse sur ENTER, F10 ne fonctionne pas, mais ce que je voudrait c'est que la fonction se met a jour automatiquement. Si je change une cellule q'utilise la fonction alors je veux que la fonction utilise la nouvelle valeur automatiquement. Es-ce possible?

Cire
0
DaNot Messages postés 221 Statut Membre 163
 
Salut Cire,

J'ai peur de pas trop comprendre ton problème : tu veux mettre le resultat d'une fonction (fonction programmee en VBA) dans une cellule. Pour cela, il suffit de définir la formule de la cellule en utilisant la fonction VBA. (Ex.
=MaSomme (C2:C3)
).

Pour que la fonction soit recalculee apres chaque modification, le classeur Excel doit être en "calcul automatique" (Menu "Outils", option "Options", dans l'onglet "Calcul" l'option "Calculer automatiquement" doit être cochée).
Si ce n'est pas le cas, la touche "F9" permet de lancer le calcul de tout le classeur (et non "F10").

Si ce n'est pas ton probleme, donnes quelques infos supplementaires...

Bon courage

DaNot
0
Cire
 
Merci beaucoup Patch,

J'ai bien recu ton exemple de fonction avec un bouton. J'ai beaucoup appris jusqu'à présent, mais je suis conscient qu'il me reste beaucoup de chose a voir.

Grâce a plusieur personnes j'ai terminé ma fonction. Mon problème est que lorsque j'utilise ma fonction dans une expresion: dans B3 =mafonction(D2) + B2

Ma fonction retourne la valeur de D2 de la feuille précédente, si je change D2 de la feuille précédente, alors la cellule B3 ne se met pas a jour automatiquement, même sur F9 et même si mon option "Calculer automatiquement" est cochée. Ma seule facon de la mettre a jour, c'est d'éditer la cellule, puis faire "Enter". Je voudrais que B3 tienne compte des modification des cellules que ma fonction utilise!

Voici ma fonction, il y a peut-être à changer, pour obtenir une execution automatique.

Function MaFct(cellule As Range) As Integer
Dim feuille As Integer

' If Cellule.Row<> 0 Then 'tentative pour vérifier l'arguement vide

feuille = ActiveSheet.Index

If feuille = 1 Then
MaFct = ThisWorkbook.Sheets(feuille).Cells(Cellule.Row, Cellule.Column)
Else
MaFct = ThisWorkbook.Sheets(feuille - 1).Cells(Cellule.Row, Cellule.Column)
End If

' End If

End Function


Je veux que ma fonction réagisse comme celle de Excel. Es-ce possible?

Merci beaucoup de votre aide,


Cire
0