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 :

[VBA-E] Données identiques sur plusieurs feuilles


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
    Avril 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut [VBA-E] Données identiques sur plusieurs feuilles
    Salut à tous,

    Je suis actuellement entrain de développer une petite appli permettant à divers types d'utilisateurs de gérer des données.

    Mon classeur se divise en 3 feuilles:
    -Accueil
    -Opérateur
    -Administration

    Je passe la partie accueil, ce ne sont que des boutons.

    Sur la feuille administration, j'ai un tableau de 10 champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N°, Remplacement, Date de la demande, Date limite, Date de réalisation, Travail effectué, Commentaire Travail à effectuer, Nb, Réformée, Commentaire de travail effectué
    Sur la feuille opérateur, j'ai un tableau de 5 champs dont 3 champs doivent provenir de la partie administration et être non modifiable, et les 2 suivant doivent lorsqu'ils sont modifiés, modifier les champs identiques sur la feuille administration.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Remplacement, N°, Commentaire Travail à effectuer, Travail effectué, Commentaire de travail effectué
    Je ne connais pas à la le nombre définitif de valeurs dans les tableaux.

    Actuellement je procéde par recopie des champs de la manière suivante:

    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
     
    Sub recopie_admin_operateur()
        Worksheets("Admin").Activate
        Worksheets("Admin").Range("Tableau3[N°]").Select
        Selection.Copy
        Worksheets("Opérateur").Activate
        Worksheets("Opérateur").Range("Tableau1[N°]").Select
        ActiveSheet.Paste
     
        Worksheets("Admin").Activate
        Worksheets("Admin").Range("Tableau3[Commentaires]").Select
        Selection.Copy
        Worksheets("Opérateur").Activate
        Worksheets("Opérateur").Range("Tableau1[Commentaires]").Select
        ActiveSheet.Paste
     
        Worksheets("Admin").Activate
        Worksheets("Admin").Range("Tableau3[Remplacement]").Select
        Selection.Copy
        Worksheets("Opérateur").Activate
        Worksheets("Opérateur").Range("Tableau1[Remplacement]").Select
        ActiveSheet.Paste
     
     
    End Sub
    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
     
    Sub recopie_operateur_admin()
     
        Worksheets("Opérateur").Activate
        Worksheets("Opérateur").Range("Tableau1[Travail effectué]").Select
        Selection.Copy
        Worksheets("Admin").Activate
        Worksheets("Admin").Range("Tableau3[Travail effectué]").Select
        ActiveSheet.Paste
     
        Worksheets("Opérateur").Activate
        Worksheets("Opérateur").Range("Tableau1[Commentaires2]").Select
        Selection.Copy
        Worksheets("Admin").Activate
        Worksheets("Admin").Range("Tableau3[Commentaires2]").Select
        ActiveSheet.Paste
        Worksheets("Admin").Range("A1").Select
        ActiveSheet.ListObjects("Tableau3").Range.AutoFilter
        ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=1
    End Sub

    Je souheterais savoir si il n'y a pas de meilleur méthode que celle-ci (je me doute bien que si!) car elle provoque des clignotements mais aussi double la taille du fichier puisque recopie certain champs.

    Une autre demande est que dans la colonne "travail effectué" de la feuille opérateur, je voudrais afficher des checkbox et lorsque la personne clique, celà modifierais la feuille admin en insérant la date du jour et en indiquant que le travail a été effectué.

    Merci d'avance

  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
    Pour les clignotements, c'est tout simple Immédiatement après le nom de la sub, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub recopie_admin_operateur()
         Application.creenUpdating = False
    et met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Application.creenUpdating = False
    End sub
    juste avant la fin.
    Ceci dit, on peut simplifier ton code. Je regarde.

  3. #3
    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
    Voilà pour l'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub recopie_admin_operateur()
    Dim FAd As Worksheet
    Dim FOp As Worksheet
    Set FAd = Worksheets("Admin")
    Set FOp = Worksheets("Opérateur")
     
        FAd.Range("Tableau3[N°]").Copy destination:=FOp.Range("Tableau1[N°]")
        FAd.Range("Tableau3[Commentaires]").Copy destination:=FOp.Range("Tableau1[Commentaires]")
        FAd.RangeRange("Tableau3[Remplacement]").Copy destination:=FOp.Range("Tableau1[Remplacement]")
     
    End Sub
    Tu en fais autant pour l'autre.
    Set sert à intancier la feuille copiée d'un côté, la feuille où tu colles de l'autre.
    Tu utilises l'instance au lieu du nom de la feuille.
    A+
    Copy -> destination t'évite d'avoir à sélectionner l'une puis l'autre feuille et évite donc les mvts de feuilles (évite d'utiliser Application.screenUpdating... aussi)

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Citation Envoyé par ouskel'n'or
    Tu en fais autant pour l'autre.
    Set sert à intancier la feuille copiée d'un côté, la feuille où tu colles de l'autre.
    Tu utilises l'instance au lieu du nom de la feuille.
    A+
    Copy -> destination t'évite d'avoir à sélectionner l'une puis l'autre feuille et évite donc les mvts de feuilles (évite d'utiliser Application.screenUpdating... aussi)
    Merci ça fonctionne très bien. et merci aussi pour les explications, c'est cool.

    Par contre si l'utilisateur a placé un filtre de champ, ça fait planter à cause du nombre de ligne différent.
    J'ai résolu le problème en faisant:
    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
     
        Sub ouverture_feuille_operateur()
        Call afficher_tout
        Call recopie_admin_operateur
        Call afficher_a_faire
    End Sub
     
    Sub afficher_tout()
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1
    End Sub
     
    Sub afficher_a_faire()
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=4, Criteria1:= _
            "=Non", Operator:=xlOr, Criteria2:="="
    End Sub
    ça fonctionne, certe! mais j'ai toujours l'impression qu'il y a mieux....


    J'espère ne pas trop abuser de la bonne volonté des membres de ce forum, si tel était le cas, merci de bien vouloir m'en avertir.

  5. #5
    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 Tu
    J'espère ne pas trop abuser de la bonne volonté des membres de ce forum, si tel était le cas, merci de bien vouloir m'en avertir.
    Quand on veut pas répondre, on répond pas
    Pour ta question, je ne vois pas comment modifier ton code... si ça fait ce que tu veux...
    Pour ton info, il y a un moyen de connaître les lignes visibles d'une feuille filtrée. Je ne sais pas si ça peut te servir mais voilà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub FiltreAutoAdresse()
    Dim NoLigne(), i, j
    Dim Ligne as range
        For Each ligne In Sheets("feuil1").AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows
            i = i + 1
            ReDim Preserve NoLigne(i)
            NoLigne(i) = ligne.Row
        Next
     
    'Relecture des No de lignes
        For j = 1 To i
            MsgBox NoLigne(j)
        Next
    End Sub
    A toutes fins utiles
    Explication : c'est SpecialCells(xlCellTypeVisible).Rows qui permet de ne retrouver que les lignes visibles d'une plage filtrée

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Merci sympa ce petit bou de code, je m'en servirais à l'occasion.

    Par contre, personne n'aurais pas une petite idée pour mes checkbox?
    Ou bien faut-il que je repense tout en passant par des userform?

  7. #7
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Citation Envoyé par ouskel'n'or
    Pour les clignotements, c'est tout simple Immédiatement après le nom de la sub, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub recopie_admin_operateur()
         Application.creenUpdating = False
    et met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Application.creenUpdating = False
    End sub
    juste avant la fin.
    Merci c'est vrai que c'est tout simple mais il faut juste avoir le reflexe et la connaissance!
    Ps: Il faut lire "Application.ScreenUpdating" et non pas "Application.creenUpdating"
    Citation Envoyé par ouskel'n'or
    Ceci dit, on peut simplifier ton code. Je regarde.
    Merci de te pencher sur mon problème!

Discussions similaires

  1. Impression zones données variant sur plusieurs feuilles
    Par Kestion100 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/05/2015, 17h00
  2. [XL-2010] Suppression données cellules sur plusieurs feuilles
    Par Blaiz58 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/09/2014, 10h19
  3. Bouton identique sur plusieurs feuilles
    Par jeanmanu dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 08/07/2008, 22h11
  4. Réponses: 15
    Dernier message: 15/05/2008, 20h53
  5. excel VBA comment recopier sur plusieurs feuilles
    Par floflo2006 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2005, 15h56

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