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

dur, dur d'écrire une fonction!!!

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jordi

Guest
:S salut je cherche à écrire une fonction dans VBA qui me permette d'inverser 2 colonne d'1 matrice qui n'a que 2 colonnes.
exemple:

12 21
34 -> 43
56 65


merci de m'aider rapidement...
(j'accepte tout meme les petites procédures, c'est important)
 
voila, je cherche à partir d'une matrice carrée binaire (que avec des 0 et des 1) à écrire une fonction sa matrice d'incidence cad la matrice qui me donne les coordonnées des points 1 (une colonne qui me donne le numéro de la ligne, et une colonne qui me donne le numéro de la colonne)


function(nbcherch, nbcaseecr)
Dim nbabs As Integer
Dim nbordo As Integer
nbabs = 2
nbordo = 3
nbcherch = 1
nbcaseecr = 1
For i = 1 To nbabs
For j = 1 To nbordo
If Cells(i, j) = nbcherch Then
Cells(6, nbcaseecr) = i + 'et' + j
nbcaseecr = nbcaseecr + 1
End If
Next i
Next j
End Function

mais ca marche pas, si tu peux m'aider à l'améloirer...
Voila, et maintenant j'essaye de transposer la matrice d'incidence et avec Alison (ma copine à moi!), j'ai écrit la fonction suivante:

public sub invers(dim abs as integer, dim ord as integer)
dim i as integer
dim vartemp as string
for i=abs to abs+3
vartemp=cells(i,ord)
cells(i,ord)=cells(i,ord+1)
cells(i,ordo+1)=vartemp
next i
endsub

mais au lieu d'une sub, je preéfererai écrire function , mais je sais pas très bien faire, si tu peux m'aider
 
Bonjour jordi

Je prend par exemple si tes données sont la colonnes a et b et commence a la ligne 1.

Sub InverseCol()
Defint i
Dim vIncLigne as variant

For vIncLigne = 1 to cells(65536,1),end(xltup).row
iCol1 = cells(vIncLigne,1)
iCol2 = cells(vIncLigne,2)
cells(vIncLigne,1) = iCol2
cells(vIncLigne,2) = iCol1
next vIncLigne

End sub

C'est un peu ordinaire, mais ça fait la job.

Philippe
 
et au lieu de sub, je peux marqué function, parce que sinon, je vois pas comment l'appliquer.

AU fait, je cherche aussi à faire du calcul matriciel, comme par exemple, l'addition de 2 matrices, j'ai écrit cette fonction mais elle non plus elle marche pas:

Function add(????????)
dim i as integer
dim j as integer
for i=1 to 3
for j=1 to 3
cells(i+4,j)=cells(i,j)+cells(i,j+4)
next j
next i
End function

en fait, je sais pas quoi mettre comme argument dans cette fonction
 
Bonjour Jordi, Helloboy,

Jordi, je ne comprends pas si tu as besoin d'une fonction à coller dans une cellule ( comme une fonction xl de base) ou si tu as besoin d'appeler une fonction qui renvoie une valeur à ta macro. Je penche pour le second cas.
Dans tous les cas, pour que la fonction renvoie une valeur, il faut une ligne qui renseigne le résultat. Par ex

Function VRAIFAUX( prénom as string) as boolean
If prénom='jordi' then
VRAIFAUX= TRUE ' resultat renvoyé
else
VRAIXFAUX= FALSE ' resultat renvoyé
end if
end Function

dans le cas où tu veux appeller ta function par le code:

Montest=VRAIFAUX('jordi')



A++
 
re jordi

ce que tu as écris est une procédure SUB, que tu l'appelles function ou toto...

dans ton exemple ci-desous, aucune valeur n'est renvoyée, mais une action est ffectuée. pour moi c'est une Sub que tu peux appeller à partir d'une autre sub, y compris avec des arguments, qui pourraient être des adresses de cellule par ex. Je pense que tu ne vois pas bien la différence entre Sub et Function. Sub = action; Function = calcul avec retour de valeur.

Function add(????????) ' quels arguments pour l'action ? une adresse? un point de départ??? ou pas besoin d'arguments ?
dim i as integer
dim j as integer
for i=1 to 3
for j=1 to 3
cells(i+4,j)=cells(i,j)+cells(i,j+4)
next j
next i
End function


Essaie de préciser et n'hésite pas à poursuivre le fil.

A++
 
Re, je viens de relire plus attentivement ton dernier post.

Ta 'Fonction' corrigée et transformée en sub devient:

Sub Sb_add(i As Integer, j As Integer)
For i = 1 To 3
For j = 1 To 3
Cells(i + 4, j) = Cells(i, j) + Cells(i, j + 4)
Next j
Next i
End Sub

Et Tu l'appelle à partir d'une autre sub:

Sub test()
Sb_add 1, 2
End Sub

NB une macro avec argument ne peut être lancée qu'à partir d'un autre qui lui fournit les arguments.

A++
 
RE de Re,
soit je suis bon pour le ZOP, soit je je ne suis pas clair, soit tu ne lis pas les posts jusqu'au bout Lol!

je te propose de passer un moment sur le chat technique pour voir ou ça pêche, parce que j'ai l'impression que tu zappes un truc et je ne vois pas quoi.... A+
 
ouais bon, t'as compris que j'avais quelque lacunes, mais tu vois je tente de m'améliorer!

bon, en fait mon probleme c'est que une fonction je sais l'appliquer.
Or, une sub je sais pas, cad que à moins de m'enregister en train d'écrire une sub je sais pas l'appeler de VB.
Est ce que je vais la chercher dens fonction malgré que ce soit une sub...

Au fait, j'ai une autre question, après l'addition, je cherche à faire des multiplication de matrices mais c'est plus dur et je sais pas bien m'y prendre.
si tu peux m'aider...
 
Bonjour, je dois écrire une fonction sur VBA et je suis vraiment nul, donc je remercie celui qui pourra m’aider.
Voila, à partir d’une matrice carrée binaire (que avec des 1 et des 0, comme la matrice identité), je dois écrire une fonction qui me donne sa matrice d’incidence (seulement pour les 1), c’est-à-dire avec une première colonne qui me donne le numéro de la ligne et une deuxième colonne qui me donne le numéro de la colonne des cases où il y a les 1.
Ensuite, j’ai une deuxième fonction à écrire, je dois effectuer un calcul matriciel entre 2 matrices d’incidence quelconques.
A partir de 2 matrice d’incidence quelconques que je multiplie par exemple (ou que j’additionne, ou que je transpose…), je dois obtenir une troisième matrice d’incidence.
Pour cette deuxième fonction, j’ai une contrainte, je ne dois repasser par des matrices carrées binaires.
Merci de bien vouloir m’aider.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

A
Réponses
25
Affichages
5 K
Angelzeus
A
Réponses
9
Affichages
2 K
M
Réponses
0
Affichages
2 K
MARGAR
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…