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 :

couper coller difficile


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut couper coller difficile
    Salut
    j'ai fait mon programme, mais il ne marche pas... je debut sur VBA, donc je ne m'étonne de rien...

    le but du programme est de:
    1-quand je double clique sur un nom de la liste, le programme enregistre la cellule double cliquer comme cible
    2-le programme efface la cellule (couper)
    3-je double clique sur la cellule ou je veux deplacer la cible, le programme me colle le nom pris comme cible.

    je vous joint le fichier de travail et mon programme.

    le programme que j'ai fait jusque la est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, [D9:H15]) Is Nothing Then nom = Target
    Target.Cut
    If Not Intersect(Target, [D9:H15]) Is Nothing Then Target = nom: nom = ""
    Cancel = True
     
    End Sub
    si quelqu'un pouvait jeter un oeil, ce serait super sympa
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour Decarre, bienvenue sur le forum,
    Voudrais-tu bien modifier le sujet de la dicussion, nous sommes tous là pour un "Probleme de programmation"
    Afin de permettre de retrouver un sujet déjà traité ou de savoir s'il on peut t'aider d'un premier coup d'oeil d'un seul, un sujet de discussion doit être explicite et indiquer brièvement le problème que tu rencontres.
    Merci de lire les règles du forum, règles qui entre autres faciliteront tes recherches.
    Bonne chance

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salutdecarre et le foum
    j'ai fait mon programme, mais il ne marche pas... je debute sur VBA
    2 Propositions une seule possible sur la feuille
    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
    Option Explicit
    Dim Nom_V As String
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    'Traitement-----------------------
    If Not Intersect(Target, [D9:H15]) Is Nothing Then
    'si cellule appartient à la plage D9:H15
        Cancel = True
        'sortir du mode édition
        If Nom_V = "" Then
        'si la variable est vide
            Nom_V = Target
            'mémoriser le contenu de cellule
            Target.ClearContents
            'effacer la cellule
        Else
        'sinon (variable non vide)
            Range(Target.Address) = Nom_V
            'cellule = variable
            Nom_V = ""
            'vider variable
        End If
    End If
    End Sub
    ou bien en conservant l'usage du Couper
    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
    Option Explicit
    Dim Flg As Boolean
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    'Traitement-----------------------
    If Not Intersect(Target, [D9:H15]) Is Nothing Then
    'si cellule appartient à la plage D9:H15
        Cancel = True
        'sortir du mode édition
        If Flg Then
        'si la variable = VRAI
            ActiveSheet.Paste
            'Coller sur la sélection
            Flg = False
            'Variable=FAUX
        Else
        'sinon (variable = FAUX)
            Target.Cut
            'couper la cellule
            Flg = True
            'Variable=VRAI
        End If
    End If
    End Sub
    Si t'as des questions poses-les

    Quelques petites précisions
    Les variables (Nom_V et Flg) sont à déclarer en haut du module (zone "(Déclaration)")

    Quelques conseils :
    N'utilise pas des noms qui pourrait être utiliser par Excel (Name, Sheet, etc..)
    Déclare tes variables (VBA-Menu Outils>>Options>>Editeur>>Déclaration obligatoire des variables) : Je sais, les super programmeurs disent que ce n'est pas utiles, mais... ça évite les erreurs de frappe. En commençant tes variables par une majuscule, quand tu tape ton code (pas trop fort), les variables déclarées sont remplcée par le même format que la déclaration. Si la variabkle n'est pas reconnue, la première lettre ne passe pas en majuscule à la validation de l'instruction (comme pour les formule)

    En déclarant tes variables, mets leur un type : ça t'oblige à réfléchir à ce que va contenir ta variable, ça économise de la place en RAM, mais de plus souvent ça t'avertit s'il y a un problème et que tu la remplis avec une valeur que tu n'attendais pas.

    Quand tu mets un fichier d'essai, supprime les feuilles inutiles

    A+

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Gorfael
    Déclare tes variables (VBA-Menu Outils>>Options>>Editeur>>Déclaration obligatoire des variables) : Je sais, les super programmeurs disent que ce n'est pas utiles, mais...
    Les supers programmeurs savent qu'une variable non déclarée est une source d'erreur et de problème.
    Tu peux aussi utiliser, en tête de module

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    bonsoir,

    Exact pour les variables, et on peut même être plus explicite, comme ce site recèle de trésors, autant en profiter, c'est un peu lourd au départ, mais on prend vite le pli et quel confort ensuite quand on revient sur un projet

    voir ici :

    http://argyronet.developpez.com/office/vba/convention/

    cordialement,

    Didier

  6. #6
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut pb d'adaptation
    tout d'abord, je vous remercie pour votre aide et vos reponses formatrices!

    cependant, je n'arrive pas a adapter les programmes que vous m'avez donné sur le fichier sur lequel je bosse, je pensais aléger ma demande et en fait je vous ai fait plancher sur un fichier qui m'aide grandement, mais ne me débloque pas tout a fait.

    je joint donc le fichier mère a ce message

    Cependant 2 points restent noir pour moi :

    1. le programme que j'ai inseré dans VBA fait bugger le premier que j'avais deja fait
    2. le programme que vous m'avez fait marche tres bien sur l'exemple mais pas sur mon planning journalier, en fait il fait que copier et effacer la cellule, mais il ne colle pas... (je l'ai essayé tout seul)


    but de la manoeuvre:
    1. faire un copier coller grace au clique droit du tableau de ressources (celui coloré a gauche vers le planning et les disponibilités)
    2. faire un couper coller a l'interieur du planning et du tableau des indisponibilités


    je pense avoir était complet sur les explications, mais si il devait résider une zone flou, j'apporterais de plus amples explication dans les plus bref delais...

    je vous remercie par avance
    Fichiers attachés Fichiers attachés

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut du mieux, mais qu'un peu
    j'ai continué a travailler mon programme, il realise la premiere etape mais m'affiche un message d'erreur pour la second (cf message du dessus)

    mon code actuel

    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
    Private Sub ScrollBar2_Change()
     
    End Sub
     
     
    Option Explicit
    Dim Nom_V As String
     
    Private Sub worksheet_BeforeDoubleClick(ByVal target As Range, cancel As Boolean)
    If Not Intersect(target, [E2:AD43]) Is Nothing Then
          cancel = True
              If Nom_V = "" Then
                  Nom_V = target
                  target.ClearContents
              Else
                  Range(target.Address) = Nom_V
                  Nom_V = ""
              End If
    End If
    End Sub
     
     
     
    Option Explicit
    Dim nom As String
     
    Private Sub Worksheet_BeforeRightClick(ByVal target As Range, cancel As Boolean)
        If Not Intersect(target, [A4:C70]) Is Nothing Then nom = target
        If Not Intersect(target, [E2:AD43]) Is Nothing Then target = nom: nom = ""
        cancel = True
     
    End Sub
    le message d'erreur me dit
    attention erreur de compilation
    seuls des commentaires peuvent apparaitre apres End Sub, End Fonction, ou End Property

    j'aimerais savoir comment faire du tout en un vu qu'apparament, on ne peux mettre qu'un "End Sub"

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    salut decarre
    Comme je me méfie du copier/coller, je ne me suis occupé que de la macro du module de classe de la feuille.
    Quelques principes :
    Les déclarations de variables :
    Dans la macro, la variable n'existe que pour la macro
    Dans un module lié à une feuille en haut de la page : fonctionne uniquement pour les macros du module. N'est remise à 0 que par fermeture du module
    Dans un module général : fonctionne pour le classeur (et dans certains cas, pour Excel)

    Donc, tu ne dois pas demander à Excel de choisir si la variable Nom est celle déclaré dans le module de la feuille Feuil1 ou celle déclarée dans le module général. Il risque de se faire des noeuds au boyeaux de la tête !

    Pour éviter toutes confusion, déclare au maximum dans les macros, et seulement en globales celles dont tu ne peux pas faire la déclaration dans les macros.

    Ne jamais utiliser le même nom pour deux variables globales et éviter les noms dont Excel peut se servir.

    Une macro commence par Sub et finit par End Sub.
    entre ces 2 instructions il ne peut pas y avoit de Sub (ou de Function).

    Dans un module il ne peut pas y avoir 2 macros de mêmes noms

    Excel ne prend jamais de décision ; il fait ce que tu lui dit de faire et que ce que tu lui dis, même si c'est une énormité. si tu lui dis avance, et qu'il y a un ravin devant, n'espère pas qu'il s'arrête. Il n'ast pas prévu pour ça.
    tu peux le vérifier en utilisant la macro automatique WorkSheet_Change avec une simple instruction Target.Offset(1,0) = 1
    tu remplis ta colonne de 1 et tu passes en erreur.

    Tout ça pour dire qu'il faut être précis dans ce que tu demandes
    but de la manoeuvre:
    1. faire un copier coller grace au clique droit du tableau de ressources (celui coloré a gauche vers le planning et les disponibilités)
    2. faire un couper coller a l'interieur du planning et du tableau des indisponibilités
    Ce que je crois comprendre :
    faire un copier coller grace au click-droit, du tableau de ressources (celui coloré a gauche) vers le planning et les disponibilités
    de la plage(A4:B13;A16:A47;A49:A59;A62:A65;A67:A70) vers la plage (E2:AD37) (quoique vraisemblablement la ligne 9 et sans doute d'autres doivent être exclues) ? c'est la macro donnée dans l'exemple, sauf que comme je ne suis pas sûr, j'ai laissé de A2:A70 vers E2:AD37

    faire un couper coller a l'interieur du planning et du tableau des indisponibilités
    Couper/coller, mais comment ? Clic-droit, là aussi ou une autre commande ? et on coupe de où, pour coller où ?

    Tu travaille sur un planning, moi sur une feuille. C'est toute la différence, mais elle est importante
    Le fait de couper coller, me fait supposer que tu veux "gommer" les personnes indisponibles de plage "A2:A70" si elles se trouvent dans la plage réservée à l'indisponibilité (?) : il faut donc prévoir l'inverse (à moins que ça ne soit pas important).
    Moi je préfère que la ressource soit reconnue comme indisponible, si elle apparaît dans la plage indisponible : une seule macro, mais une MFC qui change la couleur du fond, ou celle de la police.
    Inconvénient : "poid" du tableau
    Avantage : une seule macro (celle pour le clic-droit) et un retour à l'état antérieur facile, sans risque d'erreur.

    A+

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

Discussions similaires

  1. [VBA-E] couper-coller graphique dans autre woorkbooks
    Par gigs dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/04/2006, 12h42
  2. [VB6] copier,couper,coller un texte
    Par guizmoh dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 27/03/2006, 22h05
  3. [Word] Problème de copier/couper/coller suivant les versions
    Par SkYsO dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 07/12/2005, 21h11
  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