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 :

Comment effacer un "Range" de la feuille active dans une autre feuille ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut Comment effacer un "Range" de la feuille active dans une autre feuille ?
    Bonjour à la communauté.
    Voilà, j'interagis depuis ma feuille ActiveSheet avec d'autres feuilles.
    J'aimerai "copier" le contenu d'une ou plusieurs cellules depuis ma feuille active (codé dans un Worksheet_Change) dans une autre feuille et à la même plage (même une plage d'une seule cellule, et même après effacement), mais quel code utiliser pour gérer un .Range ?
    Exemple, je sélectionne plusieurs cellules dans mon ActiveSheet (ou une seule) et je les efface (ou les rempli), j'aimerais que ces mêmes cellules (mêmes adresses mais autre feuille) soient effacées (ou remplies) dans la feuille "Pouette" (par exemple).
    Je suis obligé d'utiliser du VBA, car je ne peux pas utiliser les formules dans Excel (il y a des lectures/écritures entre ces feuilles).
    J'avoue ne pas savoir comment m'y prendre...
    J'avais commencé par ça, mais ça ne fonctionne pas (ce n'est qu'un brouillon pour l'instant), car ici, je ne gère qu'une cellule, j'aimerais gérer un .Range.
    Voici ce qu'il y a dans mon Worksheet_Change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Pouette").Cells(ActiveCell.Row, ActiveCell.Column).Value = ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column).Value
    En gros, j'aimerais copier le contenu de mon ActiveSheet dans la feuille "Pouette" dès que je change une donnée (ou que je l'efface), mais uniquement en VBA, je ne peux pas utiliser de formules.
    Je pense donc qu'il faut utiliser un .Range, mais je connais très mal cet "Objet".
    Si quelqu'un a une astuce, une idée... Je suis preneur...
    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Salut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
      On Error GoTo Catch
     
      Application.EnableEvents = False
      Worksheets("Poet").Range(Target.Address).Value = Target.Value
     
    Catch:
      Application.EnableEvents = True
      If Err <> 0 Then MsgBox Err.Description
    End Sub

    Par contre, je n'en vois pas l'intérêt, puisque toute modification de l'une se retrouve sur l'autre. A quoi ça sert? Mystère...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Bonjour Pierre, et un grand merci pour ton aide.
    En fait, mon Worksheet_Change est dans ma feuille active (qui se nomme "Gestion") et non dans ThisWorkbook.
    Donc, elle n'est lancée que lors d'un changement depuis elle-même et non "depuis" d'autres feuilles.
    Donc, dès qu'une cellule de l'ActiveSheet change, elle se modifie dans la feuille correspondant au deux premier caractère du client qui se trouve dans ActiveSheet.Cells(3, 1).Value (ex : client="03-Denis", la feuille "03" est mise à jour) et à la même adresse (ligne et colonne).
    Si ça peut t'aider à comprendre, voici mon 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
    19
    20
    21
    22
    23
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.Calculation = xlManual
        '2 premier caractère du code client = Nom de la feuille correspondante au client
        NomFeuil = Left(ActiveSheet.Cells(3, 1).Value, 2) 
        'Vérification si la cellule changée est celle du client
        If ActiveCell.Row = 3 And ActiveCell.Column = 1 Then 
    	'Si le choix du client a changé
            If ActiveSheet.Cells(3, 1).Value <> ActiveSheet.Cells(4, 1).Value Then 
    	    'Mise à jour de la donnée dans la feuille du client
                Worksheets(NomFeuil).Range(Target.Address).Value = Target.Value 
    	    'Actualiser la cellule 'controle' du client s'il a changé
                ActiveSheet.Cells(4, 1).Value = ActiveSheet.Cells(3, 1).Value 
            End If
        Else
    	'Sauvegarde des données dans la feuille du client
            If ActiveCell.Column = 7 Or ActiveCell.Column = 11 Or ActiveCell.Column = 12 Or ActiveCell.Column = 14 Then SauveLot 
        End If
        Application.ScreenUpdating = True
        Application.Calculation = xlAutomatic
        Application.EnableEvents = True
    End Sub
    Mais lorsque je change ActiveSheet.Cells(3, 1).Value (qui est "Validation de données"), je vais chercher dans la bonne feuille toutes les données précédemment "copiées" et les mets à jour dans l'ActiveSheet.
    C'est là que j'ai le plus gros problème, car à chaque écriture dans une cellule (dons la ligne est supérieur à 3) de l'ActiveSheet, leWorksheet_Change se lance, et tourne, tourne, tourne...
    Et là, je suis dans l'impasse...
    Encore merci à toi pour ton aide.
    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Je t'ai donné la réponse dans l'autre discussion que tu as lancée pour désactiver les évènements, et j'ai d'ailleurs repris ce code ici. Donc, tu ne devrais normalement pas avoir le problème du change en cascade.

    Au niveau de la conception de ton classeur, je me pose beaucoup de questions. Pour moi, tu travailles "à l'envers". Tu devrais saisir les données dans une feuille "formulaire" et les pousser dans une table en y mettant l'indice du client, plutôt que splitter les données sur autant de feuilles que de clients. Ta conception impose de créer une nouvelle feuille à chaque nouveau client et elle impose aussi que toutes tes feuilles (saisie ET clients) soient rigoureusement identiques... Ca me semble être une usine à gaz.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Effectivement, je viens de voir ton autre réponse.
    Pour mon classeur, toutes les feuilles ont exactement le même format et mes clients ne changent jamais.
    Ce n'est pas autant une usine à gaz que ça, c'est vrai que j'aurais aimé faire autrement, mais je n'ai pas eu tellement le choix.
    Encore un grand merci à toi...
    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/11/2010, 13h03
  2. Réponses: 8
    Dernier message: 11/09/2010, 21h17
  3. Comment insérer une form dans une autre form ?
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/07/2005, 11h15
  4. Réponses: 2
    Dernier message: 28/08/2003, 00h00

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