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 :

Mettre à jour un tableau excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut Mettre à jour un tableau excel
    Bonjour,

    En rentrant un numéro d'affaire sur une feuille Excel, des données venant d'autres classeurs sont insérées.
    Le soucis c'est que ces données peuvent être modifiées et que mon classeur ne prend pas en compte ces modifications.

    Serait-il possible à l'aide d'une macro d'actualiser les chiffres de ces autres classeurs?

    Merci

  2. #2
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut
    Tu gère l'importation de tes données comment?
    Par une formule (genre = recherchev(test paramètre de recherche et les feuilles sur lesquelles chercher) ou par une macro ?

    L'idéal serait un petit exemple.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    Je gère l'importation de mes données avec le code ci -dessous. Cela importe des données d'autre classeur. Mais lorsque les données sont modifiées cela ne modifie en rien ces données sur mon classeur


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Target.Column = 1 Then Exit Sub  ' Ne réagir que si elle est située dans la première colonne
        If IsEmpty(Target) Then Exit Sub  ' Ne pas lancer la procédure lorsqu'on efface une cellule
        If Not IsNumeric(Target) Then Exit Sub  ' Ne réagir qu'à la saisie d'un numéro d'affaire
        Debug.Print Target
     
        ' On dispose donc ici du numéro d'affaire
        ' Il reste à parcourir le document "Planning Montage.xls" pour trouver les données relatives à cette affaire et à les reporter en face
        Dim w, planning As Workbook
        For Each w In Application.Workbooks
            If w.Name = "Planning Montage.xls" Then Set planning = w
        Next w
        If planning Is Nothing Then
            'Le document n'était pas ouvert, donc il faut l'ouvrir
            Application.Workbooks.Open Application.ActiveWorkbook.Path & "\" & "Planning Montage.xls"
            Set planning = Workbooks("Planning Montage.xls")
        End If
     
        Dim planningSheet As Worksheet, r As Range, c As Range, premièreLigne As Integer, dernièreLigne As Integer
        Dim semaineDébut As Integer, semaineFin As Integer
        Set planningSheet = planning.Sheets("Planning")
        Set r = planningSheet.Columns("A:A")
     
        Set c = r.Find(What:=Target.Value, LookIn:=xlValues)
        If c Is Nothing Then Exit Sub
     
        ' On ne travaille que si on a trouvé le n° d'affaire
        ' On va rechercher toutes les lignes qui comporte ce numéro d'affaire en colonne 1
        premièreLigne = c.Row
        Do
            TrouverBornes c, semaineDébut, semaineFin
            dernièreLigne = c.Row
            Set c = r.FindNext(c)
        Loop While Not c Is Nothing And c.Row <> premièreLigne
     
        ' On dispose maintenant des numéros de colonne dans lesquelles l'affaire commence (semaineDébut)
        ' et finit (semaineFin). Il reste à aller récupérer les numéros de semaine corresondants
        ' Ceux-ci se trouvent sur la ligne 1 du planning
     
        semaineDébut = planningSheet.Cells(1, semaineDébut + 1)
        semaineFin = planningSheet.Cells(1, semaineFin + 1)
        Debug.Print semaineDébut, semaineFin
     
        ' Il ne reste plus qu'à les reporter à côté de la cellule dans laquelle on a tapé le numéro d'affaire
        Target.Offset(0, 2) = semaineDébut
        Target.Offset(0, 3) = semaineFin
        ' Attention : si on commence en semaine 4 et qu'on finit en semaine 8, il me semble que la durée est de 5 semaines
        ' et non de 4 comme vous l'avez indiqué dans votre document
        ' D'où le +1 final
        ' On ajoute 52 à tout cela pour permettre les calculs de durée avec un début en semaine 51 et la fin en semaine 2 par exemple
        Target.Offset(0, 4) = (52 + semaineFin - semaineDébut + 1) Mod 52
     
     
    Private Sub TrouverBornes(c As Range, ByRef semaineDébut As Integer, ByRef semaineFin As Integer)
        Dim sem1 As Integer, sem2 As Integer
        Dim i As Integer
        i = 10
        Do While i < 62
            If IsNumeric(c.Offset(0, i)) And c.Offset(0, i) > 0 Then
                If semaineDébut = 0 Or i < semaineDébut Then semaineDébut = i
                If i > semaineFin Then semaineFin = i
            End If
            i = i + 1
        Loop
    End Sub

  4. #4
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut
    Heu alors je t'avoue j'ai pas lu tous ton code.

    Mais je verrais bien une solution plutôt simple je pense :
    - soit tu teste le changement comme tu le réalise ici mais sur une seul cellule pour récuperer ton numéro d'affaire. Puis tu fais le travail (de recherche de numero d'affaire) puis tu recopie toute la cellules sur ton classeur "d'origine".
    - soit tu fait un petit sur ta feuille et tu affecte une macro enregistrer changement et tu fais le même travail mais en recopiant toute tes cellules.

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    j'ai songé à créer une macro qui prend la valeur du numéro d'affaire, la supprime puis la réécris, et cela pour toute la colonne. Cela permettrais de faire une mise à jour pseudo automatique.

    Le problème étant le suivant : je sèche un peu beaucoup pour la créer.

  6. #6
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut
    Ce qui aiderait c'est d'avoir un appercu du formalisme de tes fichiers.

    Je comprend pour le moment que tu as un tableau
    ou en A et sur toute la colonne tu gère la saisie d'un numero, et je pense que sur la même ligne tu met les valeurs récuperer des auters fichiers. Mais comment sont les auters fichiers (ou l'autre au singulier).

Discussions similaires

  1. [PPT-2010] mise a jour automatique tableau excel dans powerpoint
    Par yeti7984 dans le forum VBA PowerPoint
    Réponses: 6
    Dernier message: 27/07/2014, 13h28
  2. [XL-2007] Mettre à jour un tableau Excel en fonction d'un autre
    Par m@tix dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 07/03/2012, 01h12
  3. Lancement d'un script pour mettre à jour un tableau HTML
    Par Goltar dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/06/2011, 13h39
  4. mise à jour automatique tableau excel par macro
    Par fredo49 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/04/2011, 11h37
  5. mettre à jour un document Excel openXml
    Par maa dans le forum C#
    Réponses: 6
    Dernier message: 08/07/2007, 14h01

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