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 :

(Débutant) Problème copier/coller


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut (Débutant) Problème copier/coller
    Bonjour,

    Je suis en train de me (re)mettre au VBA Excel (pour de vrai cette fois ci! lol). Je ne suis pour le moment qu'à comprendre les rudiments et à les mettre en pratique avec des codes n'ayant pour le moment pas d'utilité...

    Je me heurte à un petit problème sur un de ces codes... J'ai créé un code qui permet de créer une nouvelle page que l'on peut nommer à sa sauce, et qui reprends les informations de certaines cellules sur la page active.

    Mon problème se situe au niveau du "coller" des données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub NouvelleFeuilleEtCopie()
     
        ' Déclaration de variables
        Dim Nom As String
        Dim Copie As Byte
     
     
        'Je copie les données de la page active
    Copie = ActiveSheet.Range("A1:B8").Copy
     
        'Je crée la nouvelle page
    Nom = InputBox("Nous allons créer une nouvelle feuille", "Création de feuille", "Mettre le nom de la feuille")
    Worksheets.Add.Name = Nom
     
        'Je colle les données récupérer dans cette nouvelle page
    ActiveSheet.Range("A1:B8").PasteSpecial = Copie
     
    End Sub
    Le code fonctionne correctement mais une fois les actions effectuées, j'ai droit à la fenêtre débogage....

    Le problème se situe sans doute au niveau du PasteSpecial mais Coller se dit bien Paste, non?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    dans ton code remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A1:B8").PasteSpecial = Copie
    Par


  3. #3
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour
    essaye d'abord tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A1:B8").Paste
    Pour pastespecial peut recevoir des arguments je te laisse utiliser la miraculeuse touche F1, qui te sera utile tout au long de ton apprentissage et même après, pour savoir lesquelles
    exemple (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A1:B8").PasteSpecial Transpose:=True

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut,

    Au final tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub NouvelleFeuilleEtCopie()
     
    Dim Nom As String
     
    ActiveSheet.Range("A1:B8").Copy
     
    Nom = InputBox("Nous allons créer une nouvelle feuille", "Création de feuille", "Mettre le nom de la feuille")
    Worksheets.Add.Name = Nom
     
    Range("A1").Activate
    ActiveSheet.Paste
     
    End Sub
    A plus tard !

  5. #5
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Merci pour vos réponses.

    J'ai testé les diverses solutions proposées, et seule:

    ActiveSheet.Paste fonctionne sans occasionner de débogage.

    Le problème, j'avais mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A1:B8").PasteSpecial = Copie
    Pour différentes raisons (qui ne se présentent pas dans cet exemple la);
    - Si je veux mettre les données A1:B8 de la feuille x, dans par exemple C1:C8 de la feuille Y, ActiveSheet.paste à lui seul ne pourra pas me faire cette opération?

    - La variable "Copie" me sert à stocker les données dans le cas ou je copie un jour des données que je ne colle pas tout de suite. ( Par exemple j'utilise la fonction copie 5 fois, donc 5 variables, et que je colle sa ci et la par la suite)?

    @ Krovax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A1:B8").PasteSpecial Transpose:=True
    Le code m'a fait passer les colonnes en lignes. Ceci dit ce genre de fonction peut être super intéressantes pour remodeler des tableaux (enfin je pense).

    Bon allez j'attaque les conditions en attendant

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Re,

    Si je veux mettre les données A1:B8 de la feuille x, dans par exemple C1:C8 de la feuille Y
    Je pense que tu voulais dire dans C1 à D8 non ? Pour cela, il suffit de copier la Range A1:B8 comme tu l'avais déjà fait puis de faire un avant le Paste et c'est bon.

    Dans le cas où tu veux copier 2 lignes en 1 seule, il va falloir passer par le PasteSpecial.

  7. #7
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    @ Krovax: ActiveSheet.Range("A1:B8").PasteSpecial Transpose:=True
    Le code m'a fait passer les colonnes en lignes. Ceci dit ce genre de fonction peut être super intéressantes pour remodeler des tableaux (enfin je pense).
    Ben ouio c'est le consepte j'ai découvert ca en utilisant la fameuse touche F1 dont je t'ai parlé

    J'ai pas trop compris ton idée de copie
    si tu veux mettre le contenu d'une variable dans une copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1")=Tavariable
    ou
     cells(numligne,numcolonne)=TaVariable

  8. #8
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    @ DeaD78 : Autant pour moi, j'avais mal lu ton premier post, du coup je n'avais pas vu le passage:

    Range("C1").Activate
    ActiveSheet.Paste


    Sa marche du tonnerre maintenant

    Merci pour toutes vos réponses

  9. #9
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Re bonjour,

    Après un petit séjour en conditions et en boucles, j'ai créé des programmes tout simple et analysé des programmes un peu moins simple (enfin pour moi ).

    Un des programmes que j'ai analysé:

    On a un tableau Excel avec des élèves et leur notes. Donc deux colonnes, une pour les noms, une pour les notes (avec un entête de tableau NOM pour la première colonne et NOTE pour la seconde colonne).
    Voila pour le contexte.

    Et voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub BoucleTrois()
     
        'Déclaration des variables
    Dim i As Integer
    Dim NbrEleve As Integer, Note As Integer
    Dim Cel as Range
     
        'on affecte la cellule A1 à la variable Cel
    Set Cel = Range("A1")
        'la dernière ligne -1 correspond au nombre d'élève
    NbrEleve = Cel.End(xlDown).Row - 1
     
    For i = 1 To NbrEleve
    If Cel.Offset(i) = "TOTO" Then
    Note = Cel.Offset(i, 1)
    Exit For
    End If
    Next i
    MsgBox "La note de TOTO est " & Note
     
     
    End Sub
    Alors en déclaration des variables:
    Dim Cel as Range: On peut affecter une variable à un titre d'objet?
    Si oui, y a t il une liste, car j'ai une liste avec String,
    Integer, ... mais pas avec des range ou autre

    Set Cel = Range ("A1"): D'après ce que j'ai compris, Set fait juste référence
    à la cellule A1 et non a l'objet qu'il y a dedans...
    Mouai... car finalement Set ou pas, si A1 change,
    Cel changera aussi, et ce, référence ou non...
    L'intérêt réel de Set dans ce cas?

    NbrEleve = Cel.end.(Xldown).row - 1:
    - Cel est ma variable donc je démarre ne premier en A1
    - end.(Xldown) je pars de mon point de départ (Cel) et je vais jusqu'en bas
    merci F1
    - .row, je n'ai pas trop compris a quoi .row sert?
    - et -1 car j'enlève la première ligne qui n'est en fait que l'entête de colonne donc pas un élève.

    Offset(décalage ligne, décalage colonne) ... Merci F1

    Question plus général,
    Ne comprenant pas l'intérêt de la variable Cel et du Set (car finalement Set Cel = Range ("A1") est en dehors de la boucle, et A1 est une donnée tableau, dans tous les cas A1 ne varira pas et donc Cel ne varira pas non plus...), J'ai donc remplacé Cel par range ("A1") directement (donc variable Cel a la poubelle). Et le programme fonctionne tout aussi bien..
    (je mets mon raisonnement comme sa si je me trompe vous pourrez me dire pourquoi et je ne commettrai plus ce genre d'erreurs par la suite )

    J'en ai pas fini avec les boucles donc je vais peut etre vous embêter a nouveau dans peu de temps

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Alors en déclaration des variables:
    Dim Cel as Range: On peut affecter une variable à un titre d'objet?
    Oui range signifie une plage ca ne pose aucun problème, une liste regarde les tuto de dvp

    Set Cel = Range ("A1"): D'après ce que j'ai compris, Set fait juste référence
    set permet de faire un pointeur
    c'est utile dans de nombreux cas (mais ici effectivement c'est inutile)
    - .row, je n'ai pas trop compris a quoi .row sert?
    ben utilise f1 ca te renvoie le numéro de la ligne

    pour le reste ce ne sont pas vraiment des question ou en tout as ce que tu dit me semble juste

    Par contre essaye de faire un poste par question, du genre pour celui là
    un mauvais titre
    Aide a la compréhension d'un code

    un meilleur (peut être pas encore le meilleur)
    Information sur la commande Set, et les types de variable

  11. #11
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Tout d'abord merci pour ta réponse

    Un pointeur? J'ai un peu de mal avec Set. Je vois grossièrement ce que sa veut dire, mais j'arrive pas à mettre de cas concret derrière sa. En fait si j'arrive pas a transposer les choses sur d'autres plus simples, visibles.. j'arrive pas à comprendre à 100% a quoi sa sert (sa ma posé pas mal de problèmes en Math en lycée et université... trop abstrait )

    J'ai laissé dans le même poste pour ne pas créer 50 postes avec deux, trois minis questions a chaque fois.

    Mais oui pour les autres utilisateurs c'est plus pratiques de créer un nouveau poste avec titre exacte du problème.

    Encore merci pour ta réponse

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Le problème sera que quelqu'un qui cherche les réponses aux mêmes questions que toi ne pourra pas les avoir vu qu'il n'aura jamais l'idée de taper copier/coller dans le champ de recherche pour en arriver aux pointeurs

    Si ça n'a aucun rapport, tu crées un nouveau post. Ca ne dérangera personne, il y en a énormément avec une ou deux réponses seulement. De plus, c'est plus clair pour ceux qui essaient de te répondre.

    Enfin, ils sont plus vite résolus et nous on aime bien voir plein de posts résolus en page d'accueil Pas vrai Krovax ?

    Bref, ce n'est pas que pour les autres, c'est aussi pour toi

    Pour les pointeurs, je te propose d'aller jeter un oeil sur Wiki et de venir me raconter tout ça après vu que j'ai aussi un peu de mal avec les Set

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

Discussions similaires

  1. Problème copier/coller dans text
    Par cocktailonthebeach dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 24/01/2009, 21h04
  2. [DW8] Problème copier/coller désactivé
    Par tramber dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 26/08/2008, 12h39
  3. [CKEditor] Problème copier coller
    Par amestoche dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 28/05/2007, 14h04
  4. [VBA-E]Problème Copier-Coller entre 2 classeurs
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2007, 14h31
  5. Réponses: 1
    Dernier message: 06/07/2006, 19h20

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