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 d'une feuille à une autre VBA [XL-2016]


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
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut Copier/Coller d'une feuille à une autre VBA
    Bonjour à tous amis excelliens

    Actuellement j'ai deux tableaux. Le premier est sur la Feuille3, et le second est sur la Feuille5.
    Dans la première colonne de mon tableau (Feuille 5), j'ai ajouté une liste avec : En attente; Valider. Lorsque je me place dans la cellule de ce tableau et que je sélectionne "Valider", je voudrais que ça copie la valeur (situé dans la deuxième colonne du tableau) et que ça la colle dans mon autre tableau (Feuille 3, colonne B).

    J'ai fait ce code que j'ai placé dans ThisWorkbook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub AjoutValeur()
     
    Dim DL As Integer
    DL = Sheets(3).Range("b9999").End(xlUp).Row
     
    If Sheets(5).ListObjects(1).ActiveCell = "Valider" Then
     
    Range(ActiveCell, ActiveCell.Offset(0, 2)).Select.Copy
    Destination: Sheets(3).ListObjects(1).Range ("B" & DL)
     
    End If
     
    End Sub
    Bien évidement ça ne marche pas Si quelqu'un peut m'aider ça serait vraiment sympas

  2. #2
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Salut,
    Pour visualiser tes données ,
    Citation Envoyé par Romain.Frc
    je voudrais que ça copie la valeur (situé dans la deuxième colonne du tableau)
    Questions :
    • Quelle valeur ?
    • La première ?
    • La dernière ?
    • Celle en regard de Valider ?
    • ...

    Citation Envoyé par Romain.Frc
    et que ça la colle dans mon autre tableau (Feuille 3, colonne B).
    Questions :
    • Où ?
    • Première ?
    • ....

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut
    C'est vrai je n'ai pas été super claire. Voici quelques photos pour illustrer mes propos.

    Voici mon tableau feuille5
    Nom : capture 1.png
Affichages : 561
Taille : 11,9 Ko

    Automatiquement les nouvelles demandes sont "en attente"
    Nom : capture 2.png
Affichages : 549
Taille : 4,1 Ko

    Mais quand je change le statut en "valider" je voudrais copier/coller les différents arguments de chaque colonne dans mon autre tableau situé sur la feuille3
    Nom : capture 3.png
Affichages : 567
Taille : 10,1 Ko

    donc concrètement je voudrais copier la date du premier tableau et la coller dans l'autre tableau
    copier service et le coller dans informations
    etc...

    mais avec le code que j'ai cité précédemment ça me met erreur d'exécution '438', propriété ou méthode non gérée par cet objet

  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
    Il y a plusieurs erreurs dans ton code et quelques maladresses aussi.

    Pour commencer, tu devrais mettre la variable DL de type Long, ce qui t'éviterait une erreur si ton tableau deviens plus long.

    Idem pour la recherche de la dernière ligne.
    Ecris plutôt : DL = Sheets(3).Cells(Rows.Count, "B").End(xlUp).Row, ce sera plus durable.

    Je te déconseille aussi fortement de te référer aux feuilles en les appelant par leur indexe.
    Il suffirait qu'un jour quelqu'un rajoute un onglet pour que ton code ne fonctionne plus.
    Commence plutôt ton code par quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim WSSource As Worksheet, WSDest As Worksheet
    Set WSSource = Worksheets("Origine")
    Set WSDest = Worksheets("Destination")
    En remplaçant Origine et Destination par le nom de tes feuilles.
    Ensuite, dans ton code, utilise ces deux variables pour te référer aux feuilles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets(5).ListObjects(1).ActiveCell = "Valider" Then
    Si je ne me trompe pas d'après tes images, ta liste déroulante est une validation de données.
    Dans ce cas, ton ListObjetcts est inutile.
    Il est même probable que le Sheets(5) aussi soit inutile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range(ActiveCell, ActiveCell.Offset(0, 2)).Select.Copy
    Destination: Sheets(3).ListObjects(1).Range ("B" & DL)
    Destination fait partie de ma méthode Copy, il ne faut donc pas le séparer.
    Je suppose que sur l'exemple que tu as utilisé, c'était sur deux lignes. Mais regarde mieux, je pense que, après "Copy", il devrait y avoir un "_" qui indique que la ligne se poursuit sur la ligne suivantes.

    Destination est un paramètre. Sa valeur est donc indiquée par un ":=". Dans ton code, il manque le "=".

    Le Select est au mieux inutile, au pire une erreur.

    De nouveau, le ListObject est inapproprié.

    Pour ce qui est de ton premier Range, il aurait été plus simple d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Resize(1, 3).Copy

  5. #5
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Hello,
    Je pense qu'il faut penser à un autre truc.

    Si on a une colonne du tableau 1, que l'on change une valeur à partir d'une liste de validation comment le système va savoir quelle donnée a déjà été envoyée vers le tableau récapitulatif ? Les données sont retirées au fur et à mesure (normalement non puisqu'il s'agit de faire un copier/coller et non un couper/coller) ? cela signifie qu'il faut détecter la changement de valeur dans la liste de validation et de copier les données en regard de cette ligne.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut
    Merci Menhir pour ton aide aussi détaillé, je me rend compte que mon code n'était vraiment pas top. Je vais pouvoir repartir sur des bonnes bases. Donc si je n'ai rien oublié c'est ce code que je devrais faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub ConfirmationDemande()
     
    Dim DL As Long
    DL = Sheets("Mouvement").Cells(Rows.Count, "B").End(xlUp).Row
     
    Dim WSSource As Worksheet, WSDest As Worksheet
    Set WSSource = Worksheets("Demande")
    Set WSDest = Worksheets("Mouvement")
     
    If ActiveCell = "Valider" Then
    Range(ActiveCell.Resize(1, 3)).Copy Destination := Sheets("Mouvement").ListObjects(1).Range("B" & DL)
    End If
    End Sub

  7. #7
    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 Romain.Frc Voir le message
    Donc si je n'ai rien oublié c'est ce code que je devrais faire ?
    Pourquoi poser la question ? Teste et tu auras la réponse.

    PS : Je vois que tu as zappé ma remarque Ensuite, dans ton code, utilise ces deux variables pour te référer aux feuilles..
    Il ne sert à rien de déclarer et renseigner une variable si on ne l'utilise pas.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut
    Oui j'ai essayé mais ça ne marche pas, j'ai cru que j'avais oublié quelque chose

    Ah la variable merci, j'ai pris de mauvaises habitudes lol

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut
    Salut Questvba

    Oui c'est bien un changement à partir d'une validation de donné. C'est vrai que je n'y avait pas pensé

    Du coup comment faire pour détecter le changement de donné ?

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

Discussions similaires

  1. [XL-2016] VBA / Copier-coller des données d'une feuille à une autre avec une recherche variable
    Par Sandrine888 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/09/2018, 17h42
  2. Réponses: 1
    Dernier message: 24/02/2014, 15h48
  3. Réponses: 4
    Dernier message: 17/12/2012, 13h29
  4. [XL-2007] Copier/Coller de formules d'une feuille à une autre
    Par Maady dans le forum Excel
    Réponses: 4
    Dernier message: 09/09/2010, 16h59

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