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 :

"COPIER/COLLER" avec transposition sans passer par le presse papier [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Septembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 12
    Par défaut "COPIER/COLLER" avec transposition sans passer par le presse papier
    Bonjour à tous,

    Je suis débutant en VBA et je cherches des Tips à droite et à gauche sur internet afin de pouvoir développer des applications sur excel.

    Actuellement j'ai besoin de créer une matrice carré sur Excel, et donc il me faut le même nombre de colonnes que de lignes (avec les valeurs correspondantes).

    J'y arrive très bien en passant par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Selection.PasteSpecial Transpose:=True
    Application.CutCopyMode = False
    Cependant je vois souvent sur des forums qu'il n'est pas forcément recommandé de passer par le presse papier pour copier/coller ce dont on a besoin et qu'on peut passer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range.Value = Range. Value
    ca marche pas mal pour quand je veux recopier d'une colonne à une autre colonne, mais quand je veux transposer ces valeurs dans une ligne, ça coince !

    Auriez vous une solution à me proposer ?

    Merci à vous

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par alphakhan Voir le message
    Cependant je vois souvent sur des forums qu'il n'est pas forcément recommandé de passer par le presse papier pour copier/coller ce dont on a besoin et qu'on peut passer par : Range.Value = Range. Value
    Même s'il y a des cas particuliers qui posent problème, il ne faut pas généraliser.
    PasteSpecial est une méthode fiable quand ont comprend ce qu'elle fait.

    Dans ton cas, ça me semble la plus appropriée.

    L'alternative serait de passer par une boucle For To, ce qui serait plus compliqué et plus lent.
    Ca donnerait quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Long
    For i = 2 To 10
       Cells(1, i).Value = Cells(i, 1).Value
    Next i

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Septembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 12
    Par défaut
    Bonjour,

    d'accord, ça marche.

    J'essaye de simplifier mon code au maximum, mais bon, quand y en a pas besoin... Je vais garder le PasteSpecial alors (surtout que j'ai encore un peu de mal avec les boucles...

    Cependant, avec cette fonction j'ai un problème : quand je suis, par exemple quand j'ai 3 lignes, aucun soucis, j'arrive a avoir mes 3 colonnes, mais si jamais je me retrouve dans le cas ou je n'ai qu'une seule ligne, alors là problème !

    Je connais l'origine du problème : je viens chercher les cellules à copier avec range et end(xldown), par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C5", Range("C5").End(xlDown)).Select
    Selection.Copy
    Et donc quand je n'ai que la case C5 remplie, il va me sélectionner toutes les cellules de C5 à C1048576 :'(

    Auriez vous une idée de comment rester à ma cellule C5 dans le cas ou je n'ai pas d'autres cellules non vide après ?

    Merci.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par alphakhan Voir le message
    Je connais l'origine du problème : je viens chercher les cellules à copier avec range et end(xldown)
    C'est pour ça qu'il faut éviter d'utiliser xlDown et privilégier xlUp en partant de la dernière cellule possible.

    Autre chose : utiliser des Select sur des Range est généralement une mauvaise idée.
    Il est préférable de passer par des variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim R_Source As Range
    Set R_Source = Range("C5", Cells(Rows.Count, 5).End(xlUp))
    R_Source.Copy
    Ou, encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C5", Cells(Rows.Count, 5).End(xlUp)).Copy

  5. #5
    Membre averti
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Septembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 12
    Par défaut
    Ou, encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C5", Cells(Rows.Count, 5).End(xlUp)).Copy

    Je ne comprend pas trop cette formule (la partie "Cells(Rows.Count, 5)", je dirai qu'elle est censée me donner la cellule de la 5ème ligne (au pif) mais je ne suis pas trop sur...

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par alphakhan Voir le message
    Je ne comprend pas trop cette formule (la partie "Cells(Rows.Count, 5)", je dirai qu'elle est censée me donner la cellule de la 5ème ligne (au pif) mais je ne suis pas trop sur...
    Non, pas du tout.

    Lire ceci : https://docs.microsoft.com/fr-fr/off...ectedfrom=MSDN

    Dans Cells, le premier paramètre est le numéro de ligne et le second la colonne.

    Rows.Count renvoie le nombre de lignes de la feuille Excel. J'ai bien dit de la feuille et non de tes données.
    5, c'est la colonne E.
    Donc Cells(Rows.Count, 5) référence la cellule la plus basse possible dans la colonne E.

    Ensuite, le End(xlUp) recherche la plus proche cellule non vide en cherchant vers le haut.
    Lire ça : https://msdn.microsoft.com/fr-fr/lib...9(v=office.15)

    Et le Range référence une zone de cellule comprise entre C5 et cette cellule.

    N'oublie pas que lorsque tu ne comprends pas une ligne de code, tu peux accéder à l'aide VBA concernant chaque élément simplement en te plaçant sur cet élément et en appuyant sur la touche F1.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2019, 16h25
  2. [XL-2003] Copier/Coller Commentaires sans passer par le presse papier.
    Par Baluteaud dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 11/02/2018, 22h57
  3. [AC-2003] Copier-coller sans passer par le presse-papier
    Par jeanpierre78 dans le forum VBA Access
    Réponses: 5
    Dernier message: 07/03/2017, 09h50
  4. envoyer un mail avec jsp (sans passer par outlook)
    Par tntneo dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 16/04/2009, 21h35
  5. Réponses: 2
    Dernier message: 19/04/2006, 13h43

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