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 copier / coller [XL-2003]


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
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Par défaut macro copier / coller
    Bonjour à tous.

    Je souhaite réaliser un copier/coller d'une plage de cellule, selon ce que renvoi une cellule.

    Par exemple:
    J'ai la cellule D15 qui me renvoi une valeur, via une fonction RECHERCHEV.
    Je récupère cette valeur dans une variable type string. TypeRame
    Selon le résultat:
    Si TypeRame est vide, efface la selection
    Si TypeRame= PSE, copie/colle la selection.


    La macro, que j'ai réalisé en partie avec l'enregistreur de macro, fonctionne, mais boucle sans arret.

    En cause le déclencheur Worksheet Change, je suppose car la macro s'execute à chaque changement sur la feuille, et donc boucle a l'infini!

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim TypeRame As String
    TypeRame = Cells(15, 6)
     
            If TypeRame = "" Then
                Range("A39:F90").Select
                Selection.Delete Shift:=xlUp
            End If
     
            If TypeRame = "PSE" Then
                Application.Goto ActiveWorkbook.Sheets("Donnée").Range("S1:W35")
                Selection.Copy
                Sheets("Rame").Select
                Range("B39").Select
                ActiveSheet.Paste
            End If
    End Sub
    Pouvez-vous m'aider sur le sujet?

    Sachant qu'il n'y a pas que ces 2 cas possible.

    Je comptais passer par un "SELECT CASE" plutôt qu'une floppé de bloc [IF / END IF], mais je ne sais pas bien m'en servir!

    D'avance merci à tous

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    cas classique ‼

    L'évènement se déclenche lors d'une modification de cellule mais dans ce même évènement
    il y a aussi modification de cellule, le serpent se mordant ainsi la queue ‼

    Il suffit au début de l'évènement de désactiver les évènements puis de les réactiver avant de sortir de la procédure,
    grâce à la propriété EnableEvents

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim TypeRame As String
      TypeRame = Cells(15, 6)
      Application.EnableEvents = False
             Select Case TypeRame 
              Case "" Then
                Range("A39:F90").Select
                Selection.Delete Shift:=xlUp
              case "PSE"
                Application.Goto ActiveWorkbook.Sheets("Donnée").Range("S1:W35")
                Selection.Copy
                Sheets("Rame").Select
                Range("B39").Select
                ActiveSheet.Paste
            end select
      Application.EnableEvents = True

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Par défaut
    Bonjour et merci à tous pour votre réponse rapide!

    Cela fonctionne (bien éveidemment)

    Du coup, comme je ne connaissais pas cette fonction, cela va me faciliter la réalisation de pas mal d'autre macros.

    Et merci pour l'exemple / l'adaptation du Select Case

    Merci beaucoup!

  5. #5
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Pour améliorer le code, il faut supprimer tous les "Select" qui ralentissent l'exécution et provoquent des clignotements désagréables de l'affichage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("A39:F90").Delete Shift:=xlUp

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Par défaut
    Merci pour les détails du "select" inutile!

    Je modifie ça!!

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

Discussions similaires

  1. Macro copier-coller
    Par pucelo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2008, 19h49
  2. [A-00] macro copier coller
    Par nadege46 dans le forum IHM
    Réponses: 1
    Dernier message: 14/10/2008, 21h41
  3. Macro copier/coller avec tri
    Par Lechette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/03/2008, 12h44
  4. Macro copier coller première cellule vide
    Par jul85 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/02/2008, 17h06
  5. Macro copier/coller colonne- insérer nouvelle colonne
    Par rembliec dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/11/2007, 16h32

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