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 :

Faire un couper / coller en remettant le curseur au dessus / au dessous [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Chargée de recette
    Inscrit en
    Août 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de recette
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Faire un couper / coller en remettant le curseur au dessus / au dessous
    Bonsoir,

    Je suis débutante en VBA, et je me pose quelques questions.

    Mon souhait, aujourd'hui, est de couper des lignes entières d'une feuille 1 vers une feuille 2. Seul hic : ça fonctionne pour un couper coller, mais pas pour plusieurs d'affilé...!

    Voici le décor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub couper_coller()
        Sheets("Comptes").Columns(1).Find(What:="07/2017").Select
        ActiveCell.EntireRow.Select
        Selection.Cut
        Sheets("07.17").Paste
        Sheets("07.17").Select
        Selection.Offset(1, 0).Select
    End Sub
    Je suis sur mes comptes bancaires, et je souhaite, sur la feuille "Comptes", récupérer dans la colonne 1 (A), toutes les lignes dont la cellule contient "07/17".
    Je coupe la ligne entière et colle le tout sur une autre feuille, "07.17", créée au préalable.
    Je resélectionne ce que j'ai collé.

    Si mon "coller" a atterri sur la plage "A2: D7", j'aimerais (ce n'est pas ce que j'obtiens, malheureusement) que la nouvelle cellule active soit en dessous de la cellule active actuelle.
    La cellule active actuelle est la "A2" (qui va des lignes 2 à 7) : j'aimerais que la nouvelle cellule active soit la "A8".
    Et ainsi, en me faisant une petite boucle, toutes mes lignes contenant des débits / crédits effectués en "07/17" iraient toutes seules sur la nouvelle feuille "07.17"

    Mais, en l'état, le coup du "offset" ne fait qu'augmenter d'une ligne ma sélection...

    Sur ce, auriez-vous une super bonne idée à me transmettre ?
    (j'ai bien tenté de créer une macro correspondante via le créateur de macro, en m'inspirant du code ainsi créé, mais que ce soit une sélection manuelle via la souris de la cellule m'intéressant ou un clic sur la flèche vers le bas du clavier... j'ai rien vu...!)

    Merci d'avance

  2. #2
    Membre à l'essai
    Femme Profil pro
    Chargée de recette
    Inscrit en
    Août 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de recette
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Bon, vous expliquer mon problème en français a fini par payer : j'ai pu comprendre une partie de mon problème.

    Voici mon nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub couper_coller()
        Sheets("Comptes").Columns(1).Find(What:="07/2017").Select
        ActiveCell.EntireRow.Select
        Selection.Cut
        Sheets("07.17").Paste
        ActiveCell.Select
        Selection.Offset(1, 0).Select
    End Sub
    Nouveau problème : si je suis pas à pas ce code avec F8, et que au moment du "ActiveCell.Select", je pars manuellement dans la feuille concernée, le code se déroule parfaitement comme je le pensais.
    Mais, grande surprise, si je fais un F5 depuis la feuille "Comptes", les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.Select
        Selection.Offset(1, 0).Select
    s'adaptent selon la feuille "Comptes"...
    Et si je précise dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("07.17").ActiveCell.Select
        Sheets("07.17").Selection.Offset(1, 0).Select
    Je me prends un "erreur 438" dans la figure, même en regardant le code via F8...

    Je vais continuer à farfouiller de mon côté, en attendant de comprendre ce qu'il se passe

    Merci beaucoup d'avance !

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    tes "malheurs" trouvent leur source dans ta manière de travailler à coups de select, selection, etc ...
    Et que dire des lignes de code :
    que j'assimile à appeler Paul au téléphone pour lui demander son numéro de téléphone !

    Travaille directement avec les objets Excel
    Ainsi (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("toto").range("A1").value = 10
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("toto").range("A1").select
    selection.value = 10
    et tes malheurs s'estomperont.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Chargée de recette
    Inscrit en
    Août 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de recette
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Bonsoir unparia, merci d'avoir pris le temps de me répondre
    Pour ta remarque sur mon usage (un peu hasardeux) des Select et Selection : je viens de tenter un mix, afin d'alléger mon code.

    Voici mon nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets("Comptes").Columns(1).Find(What:="07/2017").Select
        ActiveCell.EntireRow.Cut
    Pour information, erreur 1004, ne marche pas sur des cellules fusionnées... (étrange, si j'utilise le Select puis Selection, fonctionne bien sans m'embêter car c'est une cellule fusionnée !)

    Effectivement, j'avais tilté entre temps que je prenais trop de chemins intermédiaires et que je pouvais aller plus vite.

    Voici ce que j'ai écris entre temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets("07.17").Paste
        ActiveCell.Offset(1, 0).Select
    Et voici ce que je réécris en me basant sur ton écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Sheets("07.17").Paste
        Worksheets("07.17").ActiveCell.Offset(1, 0).Select
    Mais, scregneugneu, mon problème demeure...
    Erreur 438 quand je fais un F5, et aucune erreur si je fais un F8 et que "j'accompagne" le code en allant moi-même dans l'onglet voulu...
    Du coup, j'avoue avoir du mal à comprendre le problème.
    J'ai tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets("07.17")
    .Paste
    .ActiveCell.Offset(1, 0).Select
    End With
    Merci d'avance...!

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Ni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Sheets("Comptes").Columns(1).Find(What:="07/2017").Select
        ActiveCell.EntireRow.Cut
    ni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(1, 0).Select
    ni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("07.17").ActiveCell.Offset(1, 0).Select
    ne respectent la discipline que je t'ai conviée à observer ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Chargée de recette
    Inscrit en
    Août 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de recette
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Mea culpa, unparia ! c'est bien involontaire de ma part : il s'agit pour moi d'un nouveau langage.
    Je prends une petite pause histoire de penser à autre chose, je relis ton message, je cherche plus d'infos pour mieux comprendre tes propos, et je réapplique

    Merci en tout cas de me donner des pistes, je pense que les pistes me seront plus bénéfiques que la réponse toute cuite dans le bec

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    me seront plus bénéfiques que la réponse toute cuite dans le bec
    Tout-à-fait, Laïnea. Tout-à-fait
    Et cela colle à ma "religion".
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Chargée de recette
    Inscrit en
    Août 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargée de recette
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Bonjour unparia, j'ai pu avancer dans mon idée.
    Malheureusement, je ne semble toujours pas pouvoir respecter tes propos... (éviter les Select / Selection, par exemple)

    Voici mon code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub couper_coller()
        Worksheets("Comptes").Activate
        Columns(1).Find(What:="07/2017").EntireRow.Select
        Selection.Cut
        Worksheets("07.17").Activate
        ActiveSheet.Paste
        ActiveCell.Offset(1, 0).Select
    End Sub
    → pour le Selection.Cut : je n'ai pas pu, pour mon fichier Excel, faire "EntireRow.Cut" puis directement coller à l'endroit voulu.
    Effectivement, mes cellules étant fusionnées, je reçois un message d'erreur.
    Toutefois, pour un autre fichier où il n'existe aucune cellule fusionnée, le "EntireRow.Cut" fonctionne et j'évite le "Selection.Cut" → le problème vient désormais de mon fichier Excel et non plus de mon code, j'ai compris tes propos

    Pour les Activate et Offset.Select : vu ce que j'attends, je ne crois pas pouvoir m'en passer, fichier ou pas fichier.

    Unparia, j'essaie de m'améliorer : s'il te plaît, vu le code que j'ai créé, y a-t-il encore un axe d'amélioration...? un mot clé, un principe que je devrais creuser un peu plus...?

    Je te remercie d'avance

    (pour les personnes comme moi se posant la question que je me posais il y a quelques jours : le code indiqué dans ce post, est désormais fonctionnel, même s'il est certainement améliorable !!)

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

Discussions similaires

  1. Faire un couper - coller de plusieurs cellules d'un tableau
    Par absot dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/06/2014, 20h41
  2. Faire un couper/coller dans un tabstrip
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/07/2007, 21h57
  3. [Conversion]Comment faire pour couper un Double trop long?
    Par dessinateurttuyen dans le forum Général Java
    Réponses: 1
    Dernier message: 13/11/2005, 02h22
  4. Couper ... coller ?
    Par sentenza dans le forum VBA Access
    Réponses: 9
    Dernier message: 12/01/2004, 12h59
  5. [VB6] Interception des évènement Copier/Couper/Coller
    Par youtch dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/10/2002, 17h09

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