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 :

Macro qui ne s'exécute pas au bon endroit pour un copier coller


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut Macro qui ne s'exécute pas au bon endroit pour un copier coller
    Bonjour,

    Y a peu de temps j'ai fait une macro qui automatise les copier/coller-transpose d'une feuille(MACRO) à une autre (CRNT MOD).
    Normalement elle doit coller les éléments sélectionnés à un endroit précis.

    J'ai des valeurs dans une ListBox, je les sélectionne (une ou plusieurs, en fonction des choix dans ma listBox) je les recherche dans ma feuille "CRNT MOD" et une fois la ligne trouvé, je copie ma sélection de la feuille MACRO vers la CRNT MOD à la ligne en dessous.

    Je sais pas si j'ai été claire, je pense que le code va s'expliquer par lui-même

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub Transpose()
    ' transpose Macro
     
     
    Dim RefChoix As String
    Dim adCell As Range
    Dim lig As Integer
     
    RefChoix = UserForm1.FTre
     
    Sheets("MACRO").Range("A2:C" & Sheets("MACRO").Range("A" & Rows.Count).End(xlUp).Row).Copy
     
    'cherche la ligne ou ya la référence
    Set adCell = Sheets("CNRT MOD").Cells.Find(RefChoix)
     
    If Not adCell Is Nothing Then
        'selectionner ligne+1
        lig = adCell.Row + 1
        'Transpose
        Sheets("CNRT MOD").Cells(lig, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=True
        Unload UserForm1
    Else
        MsgBox "La référence " & RefChoix & " n'est pas présente dans la feuille CRNT MOD." _
        & vbCrLf & "Traitement annulé.", vbCritical, "Erreur"
        Unload UserForm1
        End
    End If
     
    ActiveWorkbook.Worksheets("MACRO").Range("A:C").clear
    Application.ScreenUpdating = True
     
    End Sub
    avec FTre qui vient de l'userform:

    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
    Private Sub CommandButton3_Click()
     
    'Filtre
    Dim Derlg As Range, x As Long
    Dim FTre()
    ReDim FTre(ListBox2.ListCount)
    Set Derlg = Range("A" & Rows.Count).End(xlUp)
      For x = 0 To ListBox2.ListCount - 1
        FTre(x) = ListBox2.List(x, 0)
      Next x
    Range("A1", Derlg).AutoFilter Field:=1, Criteria1:=FTre, Operator:=xlFilterValues
     
    'Cacher le userform
    UserForm1.Hide
     
    End Sub


    En faite la chose que je ne comprend c'est que la macro s'exécute et tout mais ne colle pas les éléments au bon endroit ....


    Est-ce que je pourrai avoir un peu d'aide s'il vous plaît ?


    Bonne journée
    Laura

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Il y a quelque chose que je ne comprends pas.

    Tu déclares un Tableau FTre à l'intérieur du code d'un bouton
    Et tu affectes à une chaîne RefChoix UserForm1.FTre...

    Est-ce que tu as aussi un contrôle qui se nomme FTre ?
    MPi²

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Un tableau ? Quel tableau ? là j'avoue je ne comprends pas...,
    les choix des articles on les conserve pour filtrer une autre feuille (CRNET CDE) en fonction de ces articles là.

    Et tu affectes à une chaîne RefChoix UserForm1.FTre...
    nope enfin je ne sais pas! (A force de chercher et à l'aide d'une personne on a trouvé ce que je voulais faire de cette manière pour le bouton valider (c'est à dire filtrer une feuille en fonction des éléments choisi dans ma listbox), le principal c'est que ça marche )
    Sinon quelle chaîne voyez-vous ?

    Est-ce que tu as aussi un contrôle qui se nomme FTre ?
    Je pense que non (désolé vraiment grande débutante je suis ...)


    Merci et bonne journée!

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour,

    et elle les colles ou tes éléments ta macro ?

    c'est peu être du au fait que tu utilise mal les objets Range et cells ...

    il faut éviter de ce contenter de travailler sur la feuille active ... et donc à chaque fois que tu utilise un objet range , Cells ... il faut le précéder de ta feuille.

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim shCnr as worksheet
    set shCnr = ThisWorkBook.Sheets("CNRT MOD")
     
    'Et à partir de la chaque fois que tu veux accéder à ta feuille CNRT.... tu utilise l'objet shCnr
     
    shCnr.range("A1") = "J'ecris dans la cellule A1 de la feuille CNRT"

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    Merci de votre réponse
    En modifiant ça donne ça je pense:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub Transpose()
    ' transpose Macro
     
     
    Dim RefChoix As String
    Dim adCell As Range
    Dim lig As Integer
    dim shCnr as worksheet
    set shCnr = ThisWorkBook.Sheets("CNRT MOD")
     
    dim shMA as worksheet
    set shMA = ThisWorkBook.Sheets("MACRO")
     
     
    RefChoix = UserForm1.FTre
     
    shMA.Range("A2:C" & Sheets("MACRO").Range("A" & Rows.Count).End(xlUp).Row).Copy
     
    'cherche la ligne ou ya la référence
    Set adCell = shCnr.Cells.Find(RefChoix)
     
    If Not adCell Is Nothing Then
        'selectionner ligne+1
        lig = adCell.Row + 1
        'Transpose
        shCnr.Cells(lig, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=True
        Unload UserForm1
    Else
        MsgBox "La référence " & RefChoix & " n'est pas présente dans la feuille CRNT MOD." _
        & vbCrLf & "Traitement annulé.", vbCritical, "Erreur"
        Unload UserForm1
        End
    End If
     
    shMA.Range("A:C").clear
    Application.ScreenUpdating = True
     
    End Sub
    Mais c'est pas une histoire feuille, je dirai que c'est plus une histoire de cellule.

    C'est juste que le copier coller ne se fait pas au bon endroit. La boucle en faite, je viens de me rendre compte, ne cherche pas la référence de la listbox dans la feuille CRNET MOD.

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    vérifie déjà si tu recherche bien la bonne chose en affichant ta variable RefChoix

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    Ma variable RefChoix elle contient les valeurs de ma listbox2.

    Comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RefChoix = UserForm1.FTre
    et FTre vient de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Derlg As Range, x As Long
    Dim FTre()
    ReDim FTre(ListBox2.ListCount)
    Set Derlg = Range("A" & Rows.Count).End(xlUp)
      For x = 0 To ListBox2.ListCount - 1
        FTre(x) = ListBox2.List(x, 0)
      Next x
    ce code se trouve dans le bouton valider du userform.

    Je pense que c'est bon. mais ça marche pas. Je suis perdue

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par bbil Voir le message
    vérifie déjà si tu recherche bien la bonne chose en affichant ta variable RefChoix

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    Oui je pense, enfin qu'entendez-vous par "afficher"?

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    vérifier la valeur de ta variable en l'affichant... par un msgbox par exemple histoire d'être sur que tu recherche bien la bonne chose..

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Je reviens sur ce que je disais.
    Tu déclares un tableau à l'intérieur d'une procédure, donc ce tableau n'est reconnu que par cette procédure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim FTre()
    ReDim FTre(ListBox2.ListCount)
    Set Derlg = Range("A" & Rows.Count).End(xlUp)
      For x = 0 To ListBox2.ListCount - 1
        FTre(x) = ListBox2.List(x, 0)  'ici tu remplis ce tableau
      Next x
    Tu ne peux pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RefChoix = UserForm1.FTre
    RefChoix est une String et FTre est un tableau qui est privé à ton bouton.

    Pourquoi ne pas dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RefChoix = UserForm1.Listbox2.Text
    MPi²

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    Ah d'accord, je viens de comprendre cette histoire de tableau je crois.

    Je vais essayer votre proposition


    Rajout: Je viens d'essayer mais ça fait comme tout à l'heure !

  13. #13
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Où sont les macros que tu nous as inscrites ? toutes les 2 dans le Userform ?
    Où est appelée Transpose ?
    MPi²

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    La macro transpose c'est un module, enfin il n'est pas dans le userform et le bouton valider est dans le userform

  15. #15
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu nous as toujours pas dit ce que contenais ta variable RefChoix ! utilise un messagebox pour l'afficher et dis nous si tu cherche bien la bonne chose... affiche ensuite le numéro de ligne trouvé voir si c'est le bon.

  16. #16
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    2La vazriable refchoix contient les éléments qui sont dans ma listbox2.
    Et je comprends pas pourquoi utiliser un message box...

    Est-ce que si je joins un fichier ça vous paraîtra plus clair ?



    Rajout: je joins un fichier exemple ça pourra peut-être vous éclairer
    http://www.developpez.net/forums/d84...s-discussions/

  17. #17
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ta variable refchoix ne doit pas contenir "les éléments qui sont dans ma listbox2." elle ne doit comprendre que l'élément à chercher ! ...

    je ne te demande pas ce que tu crois mettre dans ta variable ... mais je te demande de vérifier qu'il y as bien ce que tu veux en affichant dans un message box ou en utilisant une bulle d'aide ... voir : II-1-5. Info-bulle automatique


    je te rappelle si je ne m'abuse t'on problème est que tu ne colle pas tes données au bon endroit.. et avant de coller ces données tu recherche la valeur sélectionné dans ta listbox ... le but de connaitre la valeur de refChoix c'est déjà de savoir si tu recherche la bonne chose !

    ensuite il faudra vérifier le numéro de ligne trouvé voir si cela est le bon ..!


    puis si on n'as toujours pas trouvé la solution à ton problème resteras à voir comment tu colle tes données "au bon endroit"



    pour le fichier joint je ne l'ouvrirais pas ... (déjà j'ai pas excel sur ce PC..) .. voir : Fichier joint dans vos discussions, je pense que tu peu encore donner des explications plus claire sans avoir besoin de t'appuyer sur le fichier ...

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    De ce que je peux comprendre, tu peux choisir plusieurs items dans ta listbox.
    Il faudrait alors changer ce petit bout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For x = 0 To ListBox2.ListCount - 1
        FTre(x) = ListBox2.List(x, 0)
      Next x
    qui charge toute la liste, par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      For x = 0 To ListBox2.ListCount - 1
        if listbox2.selected(x) then
           FTre(x) = ListBox2.List(x, 0)
        end if
      Next x
    '.....
      Transpose FTre
    Et, à l'intérieur du code de ton bouton, tu appelles ta procédure Transpose en y ajoutant ce tableau FTre
    Ta procédure s'écrira donc: Sub Transpose(Tablo)

    Et dans Transpose, il te faudra boucler chaque item de ce tableau et agir comme tu le souhaites.
    MPi²

  19. #19
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Points : 11
    Points
    11
    Par défaut
    Bonjour désolé de répondre aussi tardivement (ma box a laché ce we...).

    bbil: J'ai regardé avec l'info bull automatique, et ça donne . Du coup le problème vient de là! (j'aurai appris une nouvelle chose).

    Parmi: En cherchant dans ce forum ou dans un autre, je ne sais plus, j'avais trouvé un code similaire mais le problème est qu'il filtre tout la feuille après au lieu de la valeur sélectionnée.


    Et, à l'intérieur du code de ton bouton, tu appelles ta procédure Transpose en y ajoutant ce tableau FTre
    Ta procédure s'écrira donc: Sub Transpose(Tablo)

    Et dans Transpose, il te faudra boucler chaque item de ce tableau et agir comme tu le souhaites.
    J'ai pas compris le Sub Transpose(Tablo).
    Et C'est à dire boucler chaque item? ça veut dire qu'il faut écrire un à un tout les cas possible ?



    Merci votre aide!
    Bonne journée

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Tes explications sont un peu nébuleuses...
    Tu sembles vouloir sélectionner plusieurs items dans une listbox et les mettre dans un tableau RefChoix.
    Tu dois alors utiliser le bout de code que je t'ai mis.

    Pour ce qui est du copier/coller de ces items, il faut que tu boucles ce tableau et là, je ne comprends pas ce que tu fais ou veux faire.
    En regardant ton bout de code, tu copies la feuille Macro de A2 à Cx dans la feuille CNRT MOD
    Et tu colles à la ligne sous celle trouvée, ce qui aura pour but de remplacer ce qu'il y a sous la ligne trouvée... (?!)
    MPi²

Discussions similaires

  1. [OpenGL 2.x] Texture qui ne s'affiche pas au bon endroit
    Par Fooshi dans le forum OpenGL
    Réponses: 0
    Dernier message: 08/03/2013, 15h55
  2. Macro qui ne s'exécute pas sur les onglets voulus
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/05/2011, 17h17
  3. Matrice qui ne s'alloue pas au bon endroit
    Par Invité dans le forum Débuter
    Réponses: 8
    Dernier message: 03/10/2009, 09h11
  4. Réponses: 7
    Dernier message: 02/01/2007, 16h25
  5. [MySQL] requete sql qui ne s'exécute pas
    Par anto48_4 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/03/2006, 09h12

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