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 :

Récupération de données [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Chargé de mission
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Chargé de mission
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Par défaut Récupération de données
    Bonjour,

    Je vous explique mon projet :
    J'ai deux fichiers excel. Dans le premier (classeur 1), j'ai des tableaux renseignés manuellement au fur et à mesure de l'année (à vrai dire, j'ai 3 classeurs de ce type correspondant à 3 prestataires de services. La macro qui suit pourra se répéter à l'identique dans les 3) avec en dernière feuille, un tableau de synthèse du prestataire.
    Dans le deuxième (classeur 2), j'ai un autre tableau qui me sert à synthétiser les informations des 3 précédents.
    Le but est, lorsque j'enregistre le classeur 1, les infos qui se trouvent dans le tableau de synthèse se reportent dans le classeur 2.
    Précision : j'ai 3 prestataires donc 3 lignes max dans le tableau du classeur 2. Celui-ci est vide avant remplissage des 3 premiers classeurs et la ligne de chaque prestataire se rempli avec l'enregistrement. En admettant que le prestataire 1 s'appelle P1, à chaque nouvel enregistrement du classeur de P1 les données de la ligne de P1 sont remplacées par les nouvelles.
    J'espère être claire.
    Avec mon code, pas de problème pour le 1er enregistrement.
    En revanche, les enregistrements suivants génèrent à chaque fois une ligne supplémentaire au lieu de remplacer celle qui est concernée.

    Voici le code situé dans Thisworkbook:

    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
    Private Sub Workbook_Open()
    'Pour ouvrir le classeur 2 en arrière plan
    Dim vFilename As String, oJournalWorkbook As Workbook
        vFilename = "chemin_d_accès\classeur_2.xls"
    Set oJournalWorkbook = Application.Workbooks.Open(vFilename)
    oJournalWorkbook.Activate
    ActiveWindow.WindowState = xlMinimized
    End Sub
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    'définition des variables à sauvegarder
    Const S = "SYNTHESE"
    Const SR = "RECAP_INFOS"
    Dim Cellule As Range
    Dim derlig As Long
    Dim lig As Long
    Dim v As String 'v correspond au nom du prestataire. Il est qualifié ainsi pour pouvoir être réutilisé tel quel dans les 3 fichiers prestataires
    Dim v1 As Single
    Dim v2 As Single
    Dim v3 As Single
    Dim v4 As Single
    Dim v5 As Single
    Dim v6 As Single
    'Attribuer les différentes valeurs
    v = Sheets(S).Range("B5").Value
    v1 = Sheets(S).Range("B205").Value
    v2 = Sheets(S).Range("B206").Value
    v3 = Sheets(S).Range("B207").Value
    v4 = Sheets(S).Range("B208").Value
    v5 = Sheets(S).Range("B209").Value
    v6 = Sheets(S).Range("B210").Value
    'Recherche de la valeur v dans le tableau du classeur 2
    With Workbooks("classeur_2.xls").Sheets(SR)
        Set Cellule = Range("A3:A65536").Cells.Find(what:=v, LookAt:=xlWhole) 'les lignes 1 et 2 sont les entêtes de colonnes
        If Cellule Is Nothing Then
    'Traitement si la recherche ne trouve rien
        derlig = .[A65536].End(xlUp).Row + 1
        .Cells(derlig, 1).Value = v
        .Cells(derlig, 2).Value = v1
        .Cells(derlig, 3).Value = v2
        .Cells(derlig, 4).Value = v3
        .Cells(derlig, 5).Value = v4
        .Cells(derlig, 6).Value = v5
        .Cells(derlig, 7).Value = v6
    'Traitement dans le cas où la valeur est trouvée
        Else
    lig = Range(Cellule).Row
        .Cells(lig, 2).ClearContents
        .Cells(lig, 3).ClearContents
        .Cells(lig, 4).ClearContents
        .Cells(lig, 5).ClearContents
        .Cells(lig, 6).ClearContents
        .Cells(lig, 7).ClearContents
        .Cells(lig, 2).Value = v1
        .Cells(lig, 3).Value = v2
        .Cells(lig, 4).Value = v3
        .Cells(lig, 5).Value = v4
        .Cells(lig, 6).Value = v5
        .Cells(lig, 7).Value = v6
        End If
    End With
    End Sub
    Quelqu'un pourrait-il m'expliquer pourquoi au lieu de remplacer les données de la ligne correspondant à "v" lorsqu'il existe déjà, j'ai une nouvelle ligne qui se créé et comment éviter ça ?

    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Sans être rentré dans le détail il me semble que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A3:A65536").Cells.Find(what:=v, LookAt:=xlWhole)
    devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Columns(1).Find(what:=v, LookAt:=xlWhole)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lig = Range(Cellule).Row
    devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lig = .Range(Cellule).Row

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2004, 10h09
  2. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  3. [ DB2] => [ORACLE] Récupération de données
    Par LeDid dans le forum DB2
    Réponses: 3
    Dernier message: 25/06/2003, 17h10
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 15h36

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