IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] macro avec fonction "TRANSPOSE"


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut [VBA-E] macro avec fonction "TRANSPOSE"
    Bonjour tout le monde !

    Je dois faire une macro qui doit (entre autre) transposer trois valeurs qui se trouvent en colonnes, en lignes. Sans passer par la macro (dans la feuille excel toute bete), je peux utiliser la fonction Transpose qui fait ca a merveille. Le probleme, c'est que pour que cette fonction marche, on doit maintenir appuyees les touches ctrl+shift+enter lorsque l'on rentre la fonction...
    Je me demande s'il est quand meme possible de l'utiliser dans mon VB ? et si oui comment ?

    Ardeciel

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    As-tu essayé de faire la manipulation en ayant activé l'enregistreur de macro?

    De tête je dirais qu'il faut chercher du côté de FormulaArray...

    A moins que ce ne soit ArrayFormula???
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    merci du conseil ! j'y penserai la prochaine fois...

    en effet, il ma genere un code qui a l'air bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.FormulaArray="=TRANSPOSE(RC[-5]:R[2]C[-5])"
    c'est juste que je comprend pas ce qu'il y a dans les parentheses du TRANSPOSE... en gros, je comprend pas comme je dois indiquer la plage a transposer.

    merci pour ta reponse rapide !

    Ardeciel

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Par rapport à la cellule courante:
    Le premier R est relatif. Signifie la ligne courante
    C[-5] est relatif. Signifie 5 colonnes avant.
    R[2] est relatif. 2 lignes plus bas.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    apres maintes manipulation, j'ai trouve la reponse a ma precedente question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.FormulaArray="=Transpose(RC[-5]:R[2]C[-5])"
    en fait ca represente la plage a transposer en reference relative a la plage selectionnee qui va recevoir le resultat.
    ex : R[2] = 2 ligne en plus par rapport a la selection
    C[-5] = 5 colonnes en moins par rapport a le selection.

    merci de ton aide !

    Ardeciel

  6. #6
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut pb de plage avec la fonction TRANSPOSE
    bonjour !!!

    voila, j'ai ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    startColB=Range.Column("k1") ' colonne de depart dans la feuille
                                 ' qui va recevoir les resultat du transpose
    EndCol=Range.column("AG1") 'derniere colonne a transposer dans la feuille des donnees
     
    for startCol =Range.column("k1") to EndCol 
      Range(Cells(RowD,startColB),cells(RowD,StartColB+2)).select 'plage qui va recevoir le resultat
      Selection.FormulaArray="=TRANSPOSE(R[countRow]C[startCol]:R[countRow+2]C[startCol])"
      startColB=startColB+3
    next
    countRow est la ligne qui contient les donnees a transposer, ces donnees sont en colonne
    RowD est la ligne qui recoit les donnees tranposees, qui sont donc en lignes.

    ce code marche, mais me fait n'importe quoi.
    en fait je n'ai aucun moyen de savoir la position relative de la plage a tranposer, par rapport a la plage qui recois la transposition... l'ecart change tout le temps.

    j'ai donc essaye ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.formulaArray="=TRANSPOSE" & range(cells(countRow,startCol),cells(countRow+2,startCol)) & ")"
    et il me fait une :

    run-time error '13'
    type mismatch...
    comment faire pour que la plage du transpose ne depende pas de la plage qui recois les donnees ?

    et au passage :
    c'est quoi mismatch ???

    merci !

    Ardeciel

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ton erreur se produit quand tu mélanges deux types de données (valeur et string par exemple) ou de référence. Bref, y'a un truc qui lui plait pas.
    A la place de
    selection.formulaArray="=TRANSPOSE" & range(cells(countRow,startCol),cells(countRow+2,startCol)) & ")"
    J'essaierais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    selection.formulaArray="=TRANSPOSE(" & range(cells(countRow,startCol) _
    ,cells(countRow+2,startCol)).address & ")"
    Ceci dit, je n'ai jamais utilisé la transposition dans une formule...

    Tu dis

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai testé après correction de ma formule et apparemment, ça colle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.FormulaArray = "=TRANSPOSE(" & Range(Cells(2, 1), Cells(4, 1)).Address & ")"
    Fait ce que je lui demande, j'en sais rien, mais enfin, ça fait quelque chose, sans erreur...

    Tu dis

  9. #9
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    ok il prend et ca marche !!! (ou presque, apparament mes compteurs ne sont pas bon....

    mais j'ai essayer sur une feuille bidon et un code bidon... et la c'est bon.

    merci tout plein !

    Ardeciel

  10. #10
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut pb de plage avec la fonction TRANSPOSE (suite)
    bonjour !
    encore et toujours en train de me battre avec cette fonction TRANSPOSE...

    Ouskel'n'or m'a dis d'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.FormulaArray="=TRANSPOSE(" & myRange.address & ")"
    chose que fonctionne tres bien. j'utilise donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim myRange as Range
    ' range a transposer:
    set myRange=Workbooks(name).Worksheets(reg).Range(cells(countRow,stCol),cells(countRow+2,stCol)) 
     
    ' range qui recois la transposition:
    Range(cells(rowD,stCol2),cells(rowD,stCol2+2)).select 
     
    Selection.FormulaArray="=Transpose(" & myRange.address & ")"
    et la c'est le drame...

    Run-time error '1004'
    Application-defined or object-defined error
    je tiens a preciser que j'ai fait toutes les verifications possibles, toutes mes variables sont declaree et initialisee (avec les bonnes valeurs ).

    pour voir, j'enregistre une macro bidon qui transpose dans une feuille bidon d'un classeur bidon1, une plage d'une autre feuille d'un autre classeur bidon2. ca donne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A2:C2").select
    selection.FormulaArray="=TRANSPOSE([tries3.xls]sheet2!R9C1:R11C1)"
    j'essaye donc la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    selection.fornulaArray="=TRANSPOSE([" & name & "]" & reg & "!R" & countRow & "C" & stCol & ":R" & inter & "C" & stCol & ")"
     
    ' inter =countRow +2 (as integer)
    la, re-drame :

    run-time error'1004'
    unable to set the FormulaArray property of the Range class
    je suis a cour d'idee la... vous en auriez pas une ou deux ?

    Ardeciel

  11. #11
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    N'ayant pas le VBA moderne et ayant fini par être intrigué par cette fameuse fonction TRANSPOSE, je me suis décidé à aller sur la machine du voisin pour voir de quoi il retournait...
    Alors là !... Si j'ai bien vu il ne s'agit que de mettre verticalement une plage horizontale (à partir d'une cellule) ou le contraire... C'est tout !
    Et je me suis dit et me dis encore : "ben mon vieux !... tout ce tsouin-tsouin là pour ce qui pourrait être accompli sans faille et facilement avec une simple boucle !...)

    J'ai mal vu ? J'ai rêvé ? Je rêve encore ?
    Dites-moi .... (je ne veux pas mourir bête !)

  12. #12
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    en effet, je pourrais faire ca avec une ( surtout plusieur) boucle...
    ok je n'ai pas encore mon diplome et j'ai encore des tas de chose a apprendre... mais dans ce programme la fonction TRANSPOSE me permet de remplacer 4 boucles imbriquees par une seule toute simple... cela m'epargne donc une grosse prise de tete avec les compteur...
    vous ne pouviez pas le savoir, je ne vais pas mettre les XXX lignes de code, et je n'ai pas le moyen de me creer un site perso (je suis sur les ordi de la boite avec acces restreins)...
    d'autre part, j'aime pas qu'on me resiste...
    mais il est vrai que vu la tournure que ca prend, je vait devoir mettre ma fierete de cote et faire ces boucles....

    Ardeciel

  13. #13
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Je ne sais pas (connais pas VBA)... mais d'instinct :
    Je créerais une sous routine à laquelle je "passerais" mes cellules de départ et mes cellules d'arrivée (en m'arrangeant peut-etre pour passer uniquement la 1ère de départ, la 1ère d'arrivée, et le nombre de cellules à traiter)..
    Ce qui m'éviterait pas mal de maux de crane... C'est surement possible en VBA, non ?
    Et... tiens ! je l'appelerais, cette sous-routine, ERSATZTRANPOSE (pour ne pas être trop dépaysé )

  14. #14
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    en effet, j'y ai pensee... mais comme je l'ai dis, j'aime pas qu'on me resiste...
    desolee

    bon ok, I give up...

    merci pour le temps que tu m'as accorde !

    au fait... je clos la discussion, mais je peux pas dire qu'elle est resolu !!!
    je met quand meme le tag ?

    Ardeciel

  15. #15
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Tu peux délester (ce n'est pas résolu, mais çà libère)

  16. #16
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    ok merci

  17. #17
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    J'ai fusionné les 3 discussions pour y voir plus clair.

    Ce qui m'ennuie, personnellement, c'est de ne pas connaître la finalité de nos recherches.

    N'aurais-tu pas un classeur (avec des données bidons, si nécessaire) où tu aurais appliqué ce transpose sur quelques groupes de cellules.
    Je pense que le fait de "voir" la finalité de la chose nous permettrait de te répondre plus pertinemment.
    Si tu joins un classeur au forum, pense soit à le zipper, soit à changer son extension pour une qui est acceptée (.xls ne l'est pas).
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je t'ai dis
    Selection.FormulaArray = "=TRANSPOSE(" & Range(Cells(2, 1), Cells(4, 1)).Address & ")"

    et toi tu mets
    Range(cells(rowD,stCol2),cells(rowD,stCol2+2)).select
    Selection.FormulaArray="=Transpose(" & myRange.address & ")"

    Regarde la différence
    Maintenant, si tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    myRange=Workbooks(name).Worksheets(reg).Range(cells(countRow,stCol),cells(countRow+2,stCol)).address
    
    Selection.FormulaArray="=Transpose(" & range(myRange) & ")"
    ... tu n'écris pas la même chose !


    A+

    Tu as mis résolu mais si c'est vraiment résolu, tu devrais donner ta solution

  19. #19
    Membre averti Avatar de Ardeciel
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    heu... en fait, je vois pas tres bien la difference entre toutes ces syntaxes...
    je pensais que comme "Range(cells(...),cells(...))" renvoyait un objet range et que "myRange" est declare comme range, c'etait pareil...
    je me coucherai moi bete ce soir

    ensuite, je n'ai donne que mes dernieres tentatives, j'ai essayer aussi avec des trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    selection.formulaArray="=TRANSPOSE(Workbooks(name).Worksheets(reg).range(cells(...),cells(...)).address"
    et d'autre alternatives, construite avec ma naivete... mes heures de vol en vba ne sont pas nombreuse... je prefere .Net, mais exigences du tuteur obligent....

    je joins mon classeur contenant mes macros et des donnees. les boucles sont desactivees, juste la premiere ligne de la premiere feuille doit etre ajoutee.

    Ardeciel

    et en fait, ce n'etait que la premiere discussion qui etait resolue ! les deux on ete fusionnee... j'avais delestee la deuxieme...


    bon en fait mes fichier sont super lourd, et j'arrive pas a les compresser suffisament....

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Quelle est ta question ?

    A+

Discussions similaires

  1. macro avec fonction
    Par arnaud.jaspart dans le forum C++
    Réponses: 1
    Dernier message: 15/04/2009, 19h29
  2. Macro avec fonction si
    Par charlyfanny dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/02/2009, 16h41
  3. [VBA-E] macro avec base de données externe
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2007, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo