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 Jordi,

un emple de function simple personnalisée avec l'équivalent en excel de base

à +
Bertrand [file name=tiers.zip size=6444]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/tiers.zip[/file]
 

Pièces jointes

Matrice carrée binaire d’origine :

0 1 0
0 0 1
1 0 1


Grâce à une fonction , tu la transforme en sa matrice d’incidence, cad les coordonnées des points (ici que des 1) :

Lignes colonnes
1 2
2 3
3 1
3 3


Mettons maintenant, tu veux transposer ta matrice, cad tu veux que tes lignes deviennent tes colonnes et vis et versa, je te montre :

Matrice carrée binaire d’origine transposée :

0 0 1
1 0 0
0 1 1

Sa matrice d’incidence transposée :
Lignes colonnes
1 3
2 1
3 2
3 3

Mais normalement tu ne dois pas repasser par les matrices carrées d’origine, je voulais juste te montrer ce que ça faisait.
En fait, tu dois créée une fonction qui passe de la matrice d’incidence à la matrice d’incidence transposée sans repassé par les matrices carrées binaires.

Tu peux aussi d’autres fonctions de calculs matriciels comme la multiplication ou l’addition de 2 matrices d’incidence quelconques qui te donne une 3ème matrice d’incidence, toujours sans repasser par les matrices carrées d’origine.
 
Jordi,

Voici le résultat de mes cogitations

La matrice doit etre placée en A1 e tpeut contenir autant de lignes et de colonnes que tu veux

J'espere que cela répondra à ton prob

à+
Bertrand [file name=matrice_20050505174753.zip size=9005]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/matrice_20050505174753.zip[/file]

Message édité par: mutzik, à: 05/05/2005 17:47
 

Pièces jointes

ca y est j'ai compris et ca marche
SUPER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
j'ai encore quelque souci a comprendre tout ce que tu as fait donc si tu pouvais me donner quelque explications pour me faire sortir de mon staut de ZOP, je t'en remercie
 
ecoute, je voulais aussi savoir s'il était possible que tu m'aide à écrire une procédure qui me permette d'additionner ou de soustraire 2 matrices d'incidence sans repasser par les matrices d'origine
merci
 
Re Jordi et le Forum,

Partant du principe que tout est possible, fais moi parvenir le fichier que tu veux avec le résultat bien expliqué et commenté. Je verrais ce que je peux faire

à+
Bertrand
 
Salut Mutzik !

Bravo pour cette macro !

Juste une petite modif, pour alléger le code et gagner du temps si un jour tu traîtes un très grand tableau :

A la place de :

Range('A1').Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range('a1').Offset(0, nbColonnes + 2).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True

Mettre tout simplement :

Range('A1').CurrentRegion.Copy
Range('A1').Offset(0, nbColonnes + 2).PasteSpecial Transpose:=True


Bonne soirée à toi !

@ +++

Moa
 
désolé un pb technique, voici les explications:

- cas de l’addition :

Matrice d’origine :

101 001 102
001 + 100 = 101
010 010 020


Matrices d’incidence correspondantes (qui donne les coordonnées des points autre que les 0) :

Ligne colonne ligne colonne ligne colonne
1 1 1 3 1 1
1 3 + 2 1 = 1 3
2 3 3 2 2 1
3 2 2 3



- cas de la multiplication :

matrice d’origine


101 001 0 ’1’ 1
001 * 100 = 0 1 0
010 010 1 0 0


Calcul de‘1’= (1*0)+(0*0)+(1*1) : chiffres de la ligne 1* chiffres de la colonne 2

Matrices d’incidence correspondantes (qui donne les coordonnées des points autre que les 0) :

Ligne colonne ligne colonne ligne colonne
1 1 1 3 1 2
1 3 * 2 1 = 1 3
2 3 3 2 2 2
3 2 3 1



Mais normalement tu ne dois pas repasser par les matrices carrées d’origine, je voulais juste te montrer ce que ça faisait.
En fait, tu dois créée des fonctions de calculs matriciels comme la multiplication ou l’addition de 2 matrices d’incidence quelconques qui te donne une 3ème matrice d’incidence, toujours sans repasser par les matrices carrées d’origine.
 
mes matrices sont mal passées.
- cas de l’addition :

Matrice d’origine :

101 + 001 = 102
001 + 100 = 101
010 + 010 = 020


Matrices d’incidence correspondantes (qui donne les coordonnées des points autre que les 0) :

Ligne colonne ligne colonne ligne colonne
1 1 + 1 3 = 1 1
1 3 + 2 1 = 1 3
2 3 + 3 2 = 2 1
3 2 = 2 3



- cas de la multiplication :

matrice d’origine


101 * 001 = 0 ’1’ 1
001 * 100 = 0 1 0
010 * 010 = 1 0 0


Calcul de‘1’= (1*0)+(0*0)+(1*1) : chiffres de la ligne 1* chiffres de la colonne 2

Matrices d’incidence correspondantes (qui donne les coordonnées des points autre que les 0) :

Ligne colonne ligne colonne ligne colonne
1 1 * 1 3 = 1 2
1 3 * 2 1 = 1 3
2 3 * 3 2 = 2 2
3 2 = 3 1



Mais normalement tu ne dois pas repasser par les matrices carrées d’origine, je voulais juste te montrer ce que ça faisait.
En fait, tu dois créée des fonctions de calculs matriciels comme la multiplication ou l’addition de 2 matrices d’incidence quelconques qui te donne une 3ème matrice d’incidence, toujours sans repasser par les matrices carrées d’origine.
 
jordi,

Je dois être un peu fatigué, mais je ne comprends pas (ni l'addition ni la multiplication) comment tu arrives aux matrice d'incidences correspondantes

Situ pouvais me joindre ton fichier avec les résultats ...

à+
Bertrand
 
en fait c'est pas très important .
je voulais savoir seulement si tu pouvais m'expliquer dans ta macro:

Dim nbLignes As Integer, nbColonnes As Integer
Dim lig As Integer, col As Integer, nextLig As Integer

nbLignes = Range('a65536').End(xlUp).Row
nbColonnes = Range('iv1').End(xlToLeft).Column

keske tu c'est 'a65536' et 'iv1'
 
- 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…