J'ai voulus cr=E9er une formule perso. Le but de cette=20
fonction est :
- je rentre le nom de deux cellules comme attribut dans=20
la fonction et celle-ci concatene les deux cellule pour=20
donner le resultat dans la cellule o=F9 j'ai rentrer la=20
formule ( j'ai cr=E9=E9 cette formule pour comprendre comment=20
fonctionne les fonctions perso ) =3D> En gros, je veux=20
recr=E9er la fonction CONCATENER.
=3D> La fonction que veut cr=E9er s'appelera aa
=3D> voici le code de la fonction :
Function aa(a As String, b As String)
a =3D "" & a & ""
a =3D Range(a).Value
b =3D "" & b & ""
b =3D Range(b).Value
aa =3D a & b
End Function
=3D> Dans la cellule B1, j'=E9cris Salut et dans la cellule=20
B2, j'=E9cris Ced
Si j'utilise la formule CONCATENER comme ceci :
=3DCONCATENER(B1;B2) le resultat est SalutCed
Mais si j'utilise ma fonction perso comme ceci =3Daa(B1;B2)=20
le resultat n'est pas SalutCed mais #VALEUR
=3D> pourquoi =E7a marche pas ?
Remarque 1 : si j'=E9cris la formule =3Daa("B1";"B2") =E7a=20
marche
Remarque 2 : si je change le code comme =E7a :
Function aa(a As String, b As String)
a =3D Range(a).Value
b =3D Range(b).Value
aa =3D a & b
End Function
=E7a change rien
J'esp=E8re que cette fois vous aurez compris mon probl=E8me
Et si tu restais le même fil pour cette inoubliable fonction ;-) ?
Function aa(a, b) aa = a & b End Function
AV
Frédéric Sigonneau
Bonsoir ced,
Commentaires dans le corps de ton message...
J'ai voulus créer une formule perso. Le but de cette fonction est :
- je rentre le nom de deux cellules comme attribut dans la fonction et celle-ci concatene les deux cellule pour donner le resultat dans la cellule où j'ai rentrer la formule ( j'ai créé cette formule pour comprendre comment fonctionne les fonctions perso ) => En gros, je veux recréer la fonction CONCATENER.
=> La fonction que veut créer s'appelera aa
=> voici le code de la fonction : Function aa(a As String, b As String) a = "" & a & "" a = Range(a).Value b = "" & b & "" b = Range(b).Value aa = a & b End Function
=> Dans la cellule B1, j'écris Salut et dans la cellule B2, j'écris Ced Si j'utilise la formule CONCATENER comme ceci : =CONCATENER(B1;B2) le resultat est SalutCed
Mais si j'utilise ma fonction perso comme ceci ª(B1;B2) le resultat n'est pas SalutCed mais #VALEUR
=> pourquoi ça marche pas ?
Ça ne marche pas parce que les paramètres de ta fonction sont déclarées en String, ce qui veut dire qu'ils *doivent* être des chaînes de caractères sinon -> erreur. Or dans ta formule ª(B1;B2) B1 et B2 *ne sont pas* des chaînes de caractères mais des références de cellules donc -> erreur ! Tu as trouvé la solution avec ta remarque 1 ! Ecrite ainsi ª("B1";"B2") ta fonction ne déclenche pas d'erreur parce que "B1" et "B2" *sont* des chaînes de caractères (ce qui est entre guillemets est, dans Excel comme dans VBA, reconnu par convention comme une chaîne de caractères).
Remarque 1 : si j'écris la formule ª("B1";"B2") ça marche
Remarque 2 : si je change le code comme ça : Function aa(a As String, b As String) a = Range(a).Value b = Range(b).Value aa = a & b End Function
ça change rien
Ça ne change rien parce que le type de tes paramètres est toujours String et que tu dois donc toujours passer des chaînes de caractères à ta fonction. Si tu veux "imiter" le comportement d'Excel, et puisque tu as pris l'excellente résolution de typer tes arguments, tu dois changer le type de ceux de ta fonction. Range fait très bien l'affaire.
- Fonction modifiée (solution déjà fournie quasi telle que dans un fil précédent :) :
Function aa(a As Range, b As Range) aa = a.Text & b.Text End Function
- Utilisation :
ª(B1;B2)
J'espère que cette fois vous aurez compris mon problème
Je l'espère aussi :) Faut nous pardonner, on est un peu durs de la comprenette...
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !
Bonsoir ced,
Commentaires dans le corps de ton message...
J'ai voulus créer une formule perso. Le but de cette
fonction est :
- je rentre le nom de deux cellules comme attribut dans
la fonction et celle-ci concatene les deux cellule pour
donner le resultat dans la cellule où j'ai rentrer la
formule ( j'ai créé cette formule pour comprendre comment
fonctionne les fonctions perso ) => En gros, je veux
recréer la fonction CONCATENER.
=> La fonction que veut créer s'appelera aa
=> voici le code de la fonction :
Function aa(a As String, b As String)
a = "" & a & ""
a = Range(a).Value
b = "" & b & ""
b = Range(b).Value
aa = a & b
End Function
=> Dans la cellule B1, j'écris Salut et dans la cellule
B2, j'écris Ced
Si j'utilise la formule CONCATENER comme ceci :
=CONCATENER(B1;B2) le resultat est SalutCed
Mais si j'utilise ma fonction perso comme ceci ª(B1;B2)
le resultat n'est pas SalutCed mais #VALEUR
=> pourquoi ça marche pas ?
Ça ne marche pas parce que les paramètres de ta fonction sont déclarées en
String, ce qui veut dire qu'ils *doivent* être des chaînes de caractères sinon
-> erreur.
Or dans ta formule
ª(B1;B2)
B1 et B2 *ne sont pas* des chaînes de caractères mais des références de cellules
donc -> erreur !
Tu as trouvé la solution avec ta remarque 1 ! Ecrite ainsi
ª("B1";"B2")
ta fonction ne déclenche pas d'erreur parce que "B1" et "B2" *sont* des chaînes
de caractères (ce qui est entre guillemets est, dans Excel comme dans VBA,
reconnu par convention comme une chaîne de caractères).
Remarque 1 : si j'écris la formule ª("B1";"B2") ça
marche
Remarque 2 : si je change le code comme ça :
Function aa(a As String, b As String)
a = Range(a).Value
b = Range(b).Value
aa = a & b
End Function
ça change rien
Ça ne change rien parce que le type de tes paramètres est toujours String et que
tu dois donc toujours passer des chaînes de caractères à ta fonction.
Si tu veux "imiter" le comportement d'Excel, et puisque tu as pris l'excellente
résolution de typer tes arguments, tu dois changer le type de ceux de ta
fonction. Range fait très bien l'affaire.
- Fonction modifiée (solution déjà fournie quasi telle que dans un fil précédent
:) :
Function aa(a As Range, b As Range)
aa = a.Text & b.Text
End Function
- Utilisation :
ª(B1;B2)
J'espère que cette fois vous aurez compris mon problème
Je l'espère aussi :)
Faut nous pardonner, on est un peu durs de la comprenette...
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai voulus créer une formule perso. Le but de cette fonction est :
- je rentre le nom de deux cellules comme attribut dans la fonction et celle-ci concatene les deux cellule pour donner le resultat dans la cellule où j'ai rentrer la formule ( j'ai créé cette formule pour comprendre comment fonctionne les fonctions perso ) => En gros, je veux recréer la fonction CONCATENER.
=> La fonction que veut créer s'appelera aa
=> voici le code de la fonction : Function aa(a As String, b As String) a = "" & a & "" a = Range(a).Value b = "" & b & "" b = Range(b).Value aa = a & b End Function
=> Dans la cellule B1, j'écris Salut et dans la cellule B2, j'écris Ced Si j'utilise la formule CONCATENER comme ceci : =CONCATENER(B1;B2) le resultat est SalutCed
Mais si j'utilise ma fonction perso comme ceci ª(B1;B2) le resultat n'est pas SalutCed mais #VALEUR
=> pourquoi ça marche pas ?
Ça ne marche pas parce que les paramètres de ta fonction sont déclarées en String, ce qui veut dire qu'ils *doivent* être des chaînes de caractères sinon -> erreur. Or dans ta formule ª(B1;B2) B1 et B2 *ne sont pas* des chaînes de caractères mais des références de cellules donc -> erreur ! Tu as trouvé la solution avec ta remarque 1 ! Ecrite ainsi ª("B1";"B2") ta fonction ne déclenche pas d'erreur parce que "B1" et "B2" *sont* des chaînes de caractères (ce qui est entre guillemets est, dans Excel comme dans VBA, reconnu par convention comme une chaîne de caractères).
Remarque 1 : si j'écris la formule ª("B1";"B2") ça marche
Remarque 2 : si je change le code comme ça : Function aa(a As String, b As String) a = Range(a).Value b = Range(b).Value aa = a & b End Function
ça change rien
Ça ne change rien parce que le type de tes paramètres est toujours String et que tu dois donc toujours passer des chaînes de caractères à ta fonction. Si tu veux "imiter" le comportement d'Excel, et puisque tu as pris l'excellente résolution de typer tes arguments, tu dois changer le type de ceux de ta fonction. Range fait très bien l'affaire.
- Fonction modifiée (solution déjà fournie quasi telle que dans un fil précédent :) :
Function aa(a As Range, b As Range) aa = a.Text & b.Text End Function
- Utilisation :
ª(B1;B2)
J'espère que cette fois vous aurez compris mon problème
Je l'espère aussi :) Faut nous pardonner, on est un peu durs de la comprenette...
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !