tableau ?

  • Initiateur de la discussion nono
  • Date de début
N

nono

Guest
Slt le forum,

Voilà, je voudrais transformer les colonnes d'un fichier en ligne d'un autre fichier, en gros la valeur qui se trouve dans une cellule dont l'adresse est F2 dans mon premier fichier doit etre re-transcrit dans la cellule B6 dans mon 2ieme fichier. (autre exp: M3 --> C13)
Petite précision, je dois faire ca par vba et non pas par une formule ou une manip sous excel.

J'avais pensé faire ça grace à un tableau, du style

Dim Tab(x, y) as string

Tab(x, y)= cell.address(y, x)

Mais bon, comme vous pouvez certainement vous en apercevoir, je suis débutant et je n'arrive pas à développer cette idée...
Si ca tente quelqu'un, ca serait avec plaisir, d'avance merci.

nono ;-)
 
D

Dan

Guest
Re: Macro pour transformation tableau ?

Bonjour Nono,

si j'ai bien compris ton pb, tu pourrais faire ceci sans macro :

1. Tu fais copie ta sélection
2. Sélectionne la première cellule dans le fichier de destination
2. Menu Edition / collage spécial
3. Coche la case "Transposé" puis OK

Pour le faire par macro, utilise l'enregistreur de macro automatique d'excel et via le menu Macro / nouvelle macro tu enregistres la séquence ci-avant.

Dans l'attente de te lire.

@+

Dan
 
N

nono

Guest
Slt dan , le forum,

Ecoute Dan, c'est sympa d'avoir répondu mais c'est du tout comme ca que je peux faire, je l'avais précisé dans le message d'origine...

J'ai d'autre chose à faire plus complex dans cette macro que ce que je demande (en gros, je ne veux pas que ce soit qq'un du forum qui me fasse mon programe, je veux simplement avoir la méthode), donc je suis obligé d'utliser vba mais pas pour reproduire une manip excel.
Maintenant ce message risque de ne plus avoir de réponses puisqu'il en a déjà eu....

Mais bon, merci quand meme!!
 
D

Dan

Guest
Re,

A te lire on aurait presque l'impression que tu me reproches de t'avoir répondu.

Mais je ne vois vraiment pas pourquoi d'autres ne répondraient pas à ton message. Les réponses ne sont pas personnalisées ici que je saches ! sinon le forum ne sert à rien !

Bon ben on va voir ce que d'autres vont de proposer.

@+

Dan
 
M

Michel_M

Guest
Salut nono, salut Dan et le Forum

Désespères pas Nono, quand j'ai lu que c'était Dan qui répondait, je suis allé sur le fil en espèrant voir une manifique formule matricielle...


Pour ta macro:
si tu veux utiliser la fonction "transpose "dans VBA, va faire un tour sur le site de Laurent longre à sa feuille "accélérer VBA" au chapitre "evaluate": ça ne se lit pas comme un roman policier mais tu apprendras des trucs utiles pour progresser. En ce qui concerne ton pb, c'est, à mon avis, la syntaxe la plus efficace pour un prog.

A étudier cependant, car avec "transpose" tu as une liaison dynamique

Avec un tableau intermédiaire:

compter le nombre d'éléments dans "source"

redimensionner le tableau au nombre d'éléments (instruction Redim)

affecter au tableau la valeur des cellules
tableau=range(source).value

ensuite reporter dans cible dans la rangées voulue ROW=x

et boucler avec n jusqu'à nombre éléments
cell'x,y)=tableau(n)

y peut -être différents de n ( début colonne EV, par ex ....)


Bon courage
Michel
 
N

nono

Guest
Dan, le forum,

Je ne te reproche pas du tout de m'avoir répondu, c'est très sympa, je dis simplement que j'avais précisé que je ne voulais pas d'une manip excel car ca ne conviendrait de toute façon pas.
Je dis également que l'on va plus facilement s'intéresser à un message qui a 0 réponse plutot qu'à un autre qui en a maintenant 4...

Voilà, et désolé si je t'ai véxé.
a+
Nono
 
M

michel

Guest
Re: transposer tableau ?

bonjour Dan , Nono et Michel

J'espere que l'exemple ci joint pourra t'aider
la macro se passe entre deux feuilles mais tu peux facilement l'adapter pour deux classeurs


bon apres midi
michel
 

Pièces jointes

  • transposer.zip
    8.6 KB · Affichages: 23
  • transposer.zip
    8.6 KB · Affichages: 26
  • transposer.zip
    8.6 KB · Affichages: 27
@

@+Thierry

Guest
Bonsoir ce Fil,

Et bien pour un fil où Nono avait peur de ne pas avoir de réponse il y a du monde lol !!!

Bon alors je crois qu'on à fait le tour de ta question en tout cas !!!

Et la solution de Michel BugsBunny, je pense t'apportera toute satistaction.

Pour Michel_M, "Transpose" n'engendre pas systématiquement une liaison dynamique, pour peu que l'on définisse l'argument Paste à "Paste:=xlValues".

Et sinon on aurait pu sans tableau faire aussi ceci, ce qui n'aurait pas nécessité d'utiliser "Redim" si ce n'est juste "Préserve" pour notre ami Dan qui n'a pas se sentir très heureux en lisant ta réponse... Enfin tu t'es excusé gentillement donc on en fait pas un plat.

Sub TranspositionDanPreserve()
Dim NewSheet As Worksheet
Dim MySource As Range, MyPlage As Range, MyCells As Range
Dim L As Integer, C As Integer


L = Sheets("Feuil1").Range("A65536").End(xlUp).Row
C = Sheets("Feuil1").Range("IV1").End(xlToLeft).Column
Set MySource = Sheets("Feuil1").Range(Cells(1, 1).Address, Cells(L, C).Address)

MySource.Copy
Sheets("Feuil2").Range("A1").PasteSpecial _
Paste:=xlValues, _
Transpose:=True
Application.CutCopyMode = False


'ici pour faire un traitement imaginaire de la nouvelle plage
L = Sheets("Feuil2").Range("A65536").End(xlUp).Row
C = Sheets("Feuil2").Range("IV1").End(xlToLeft).Column
Set MyPlage = Sheets("Feuil2").Range(Cells(1, 1).Address, Cells(L, C).Address)
For Each MyCells In MyPlage
If IsNumeric(MyCells) Then
MyCells = MyCells * 2
Else
MyCells = "Traitée :" & MyCells
End If
Next
End Sub

çà fait un peu usine à gaz, mais disons que je fais un traietement sur la plage de destination...

Bonne fin de Samedi à tous et toutes
@+Thierry
 
N

nono

Guest
Slt tout le monde, le forum

Bon, mea culpa, je suis désolé d'avoir été un peu bougon. Force est de constater que vous êtes tous sympa et super compétant.
Merci à tous et vive le forum.
nono
 
M

Michel_M

Guest
Bonjour à tous

Thierry écrit:

....
Pour Michel_M, "Transpose" n'engendre pas systématiquement une liaison dynamique, pour peu que l'on définisse l'argument Paste à "Paste:=xlValues".
...

Or l'aide Microsoft n'indique pas cela:

....
TRANSPOSE

Renvoie une plage verticale de cellules sous forme de plage horizontale, ou vice versa. La fonction TRANSPOSE doit être entrée sous la forme matricielle dans une plage dont le nombre de lignes et de colonnes est égal au nombre de lignes et de colonnes de matrice, respectivement. Utilisez la fonction TRANSPOSE pour inverser l'orientation verticale et horizontale d'une matrice dans une feuille de calcul. Par exemple, certaines fonctions comme DROITEREG renvoient des matrices horizontales. La fonction DROITEREG renvoie une matrice horizontale de la pente et l'intersection Y pour une droite. La formule suivante renvoie une matrice verticale de la pente et l'intersection Y provenant de la fonction DROITEREG :
TRANSPOSE(DROITEREG(Yvaleur,Xvaleur))
Syntaxe
TRANSPOSE(tableau)
tableau représente une matrice ou une plage de cellules dans une feuille de calcul que vous voulez transposer. La transposition d'une matrice est créée en prenant la première ligne de la matrice d'origine comme première colonne de la nouvelle matrice, la deuxième ligne de la matrice d'origine comme deuxième colonne de la nouvelle matrice et ainsi de suite.


....
Quand j'écris qu'on peut utiliser "transpose" dans la macro-fonction, tel que je l'ai lu sur le site de Laurent Longre, il s'agit d'une worksheetfunction.

Nono ne voulant pas de prog "clé en main", ni de l'enregistreur de macro pour la solution de Dan qui est valable, je lui ai envoyé uniquement ces pistes sans plus.
Voilà, sans vouloir polémiquer avec qui que ce soit

Bon dimanche
Michel
 
@

@+Thierry

Guest
Bonjour Michel, Dan, Michel, Nono

Très interressant cette histoire de TRANSPOSE, bien que je ne soies tombé sur aucune aide VBA, mais uniquement l'Article sur la méthode PasteSpecial associée à l'Argument de type Variant "Transpose". Mais grace à ton dernier Post j'ai finalement compris (suis nul en Formule et n'en connait pratiquement aucune, heureusement nous avons Monique, Celeda, Jean-Marie, Dan... et par conséquent avant que je comprenne de quoi tu parles, j'ai finalement compris que c'était une Fonction Excel !!! LOL)

Par ailleurs je connais bien le site de Laurent, qui est un Maître pour moi depuis que l'ai croisé sur le MPFE mais grace à toi, Michel, j'ai re-lu son "Excellent roman policier" sur la Méthode EVALUATE qui, donc entre autre, lui sert à rendre accessibles à VBA certaines formules matricielles. En outre il précise (tout en ne sachant pas pourquoi !! lol) pour certains cas de figures il est obligé de passer par cette fonction TRANSPOSE d'Excel, par exemple pour un tableau renvoyé par la fonction RANK...

En fait ce qu'il faut bien préciser ici, c'est avec la Méthode VBA EVALUATE qui permet ces "miracles", dont l'usage de cette fonction TRANSPOSE pour faire un tableau. Ce qui pourrait être une troisième alternative pour Nono.

En fait c'est très bien d'être revenu nous préciser tout ceci, çà fera un dimanche intructif !! (un de plus !!) Merci à Toi et ne t'inquiète pas, pour moi c'est loin d'être une polémique, si j'apprends quelque chose, c'est constructif. On ne parlait pas de la même chose tout simplement.

Bon Dimanche à tous et toutes
@+Thierry
 
M

Michel_M

Guest
Re Thierry


Merci de tes explications super sympas car j'ai souvent planché (et pas encore tout compris) sur tes démos 1 et 2 dans ce que j'appelle les "paquets-cadeaux", au passage Merci, de la centrale de téléchargement et je m'étonnais de ta réponse.

En ce qui concerne le site de Laurent Longre, pareil, je planche mais je n'ai pas encore tout pigé (la fameuse fonction Rank)

C'est comme ça que je progresse petit çà petit que ce soit en VBA ou en "Excel pur"; répondre à des questions sur le forum est pour moi le meilleur exercice.

Voilà, encore Merci et bon dimanche
Michel
 
D

Dan

Guest
Salut à tous,

Mais c'est super intéressant tout cela Thierry, Michel.
Je crois que je vais aller aussi faire un tous sur le site Laurent.

Merci à vous deux et espérons que Nono trouveras une solution qui lui convient.

@+

Dan
 
J

Jipi

Guest
Re: transposer tableau ?

Bonjour à tous

Je reprends ce fil car je suis à la recherche d'une solution complémentaire à celle proposée sur ce fil.
Je dois retraiter sur excel (par VBA) un fichier XML de ventes de produits constitué par 2 colonnes : Identifiant et Valeur, Il y a 4 identifiants et plusieurs valeurs. La fonction {Transpose} apporte une réponse, mais je souhaites aller à la ligne à chaque changement de série d'identifiant.

Je joins un fichier exemple qui vous permettra de mieux comprendre mon souci.

Merci de votre aide.
Bonne soirée.
 

Pièces jointes

  • Transpose.zip
    6.3 KB · Affichages: 22
  • Transpose.zip
    6.3 KB · Affichages: 22
  • Transpose.zip
    6.3 KB · Affichages: 24

Discussions similaires

Réponses
5
Affichages
477

Statistiques des forums

Discussions
312 502
Messages
2 089 019
Membres
104 006
dernier inscrit
CABROL