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 :

Extraction de données selon conditions entre 2 fichiers


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut Extraction de données selon conditions entre 2 fichiers
    Bonjour,

    Je cherche une solution VBA à mon problème. Je me débrouille sur les bases, mais la ce que je veux faire dépasse mes connaissances.

    J'ai deux fichiers un "balance" que je crée à partir de sage50 et l'autre "analyse" que je crée de toute pièce.

    Mon objectif final est d'obtenir un tableau de données pour me faire un graphique qui va représenté le niveau d'encaisse (et d'autre données) à chaque vendredi.
    Mon fichier d'analyse doit donc rechercher la ligne nommé "encaisse" du fichier "balance" et rapporter dans la première colonne du tableau "analyse" la donnée qui se trouve dans la colonne 3.
    Ce type de problème me fait beaucoup penser à la rechercheV, mais je suis sur que ce serait plus efficace avec des validations et des conditions.

    Je prévois mettre à jour(écraser) mon fichier "balance" à chaque vendredi et démarrer la macro pour que la nouvelle donnée s'ajoute à "analyse" à la suite des autres.

    J'ai joint une extraction de l'entreprise modèle pour aider.

    Balance.xls

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Kemherar, bonjour le forum,

    Citation Envoyé par kemherar Voir le message
    Mon fichier d'analyse doit donc rechercher la ligne nommé "encaisse" du fichier "balance" et rapporter dans la première colonne du tableau "analyse" la donnée qui se trouve dans la colonne 2.
    Ça ne serait pas plutôt la donnée en colonne 3 ?... (cette remarque surtout pour retrouver ton fil)

  3. #3
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Oui merci, c'est bien la colonne 3 qui contient l'information. j'ai fait l'ajustement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible dans le fichier joint.

    Vous avez une colonne débit et une colonne crédit, fallait-il récupérer les deux valeurs ?

    A revoir peut-être le format date.

    Cordialement.

  5. #5
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Une autre proposition avec le code ci-dessous (j'ai considéré que les deux classeurs se trouvaient dans le même dossier) :

    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
    Sub Macro1()
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim CH As String 'déclare la variable CH (Chemin d'accès)
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim CD As Workbook 'déclare la variable CS (Classeur Destination)
    Dim OD As Worksheet 'déclare la variable CS (Onglet Destination)
    Dim R As Range 'déclare la variable R (Recherche)
     
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Set CS = ThisWorkbook 'définit le classeur source CS
    CH = CS.Path & "\" 'définit le chemin d'accès
    Set OS = CS.Sheets("Feuil1") 'définit l'onglet source OS
    On Error Resume Next 'gestion des errurs (en cas d'erreur passe à la ligne suivante)
    Set CD = Workbooks("Analyse.xls") 'définit le classeur destination (génère une erreur si ce classeur n'est pas ouvert)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        Workbooks.Open (CH & "Analyse.xls") 'ouvre le classeur "Analyse.xls"
        Set CD = ActiveWorkbook 'définit le classeur destination CD
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    Set OD = CD.Sheets("Feuil1") 'définit l'onglet ddestination OD
    'définit la recherche R (recherche entière de "Encaisse" dans la colonne 2 (=B) de l'nglet source OS
    Set R = OS.Columns(2).Find("Encaisse", , xlValues, xlWhole)
    If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
        'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première ligne vide de la colonne A de l'onglet OD)
        Set dest = IIf(OD.Range("A1") = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
        R.Offset(0, 1).Copy dest 'copie la valeur (en texte dans l'exemple ?) et la colle dans DEST
        dest.Value = dest.Value * 1 'transforme la valeur en texte en valeur numérique
        dest.NumberFormat = ". ## ;-. #;" 'format nombre à deux décimales
    End If 'fin de la condition
    CD.Save 'enregistre le classeur destination CD
    CD.Activate 'active le classeur destination CD
    OD.Activate 'active l'onglet destination OD
    dest.Select 'sélectionne la dernière données récupérée
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub
    Fichiers attachés Fichiers attachés

  6. #6
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Merci, je n'ai pas encore consulté les solutions, car j'ai été occupé sur autre chose (mon nouvel ordi de travail est arrivé!!)

    Je vais voir si je peux bien les appliquer et apprendre autant que possible ce qui s'y trouve.

    Et oui je peux garder les deux dans le même dossier

    Citation Envoyé par Thautheme Voir le message
    Bonsoir le fil, bonsoir le forum,

    Une autre proposition avec le code ci-dessous (j'ai considéré que les deux classeurs se trouvaient dans le même dossier) :
    J'avais compris dossier dans le sens de répertoire. Il me faut vraiment 2 fichiers distincts. Cependant le code fonctionne et j'aime bien les explications.

    Bonjour,

    Une solution possible dans le fichier joint.

    Vous avez une colonne débit et une colonne crédit, fallait-il récupérer les deux valeurs ?

    A revoir peut-être le format date.
    Cette solution par contre est impeccable. j'aurais eu tendance à faire la saisi de donnée à l'horizontale plutôt que verticale (habitude de visualitsation), mais vraiment ça fonctionne à merveille.
    Pour ce qui est de la récupération de valeur, il n'y a qu'une seule valeur à récupérer, cependant dans mon fichier final j'aurai à récupérer une valeur qui sera au crédit et non au débit. (le débit serait à 0)

    Merci Érik, je planche sur votre solution pour voir comment ajouter éléments dans la recherche.
    Dans mon final, mes colonnes seraient dans l'ordre: "Date" (la façon de récupérer la date convient, car elle aura toujours le même format à 10 caractère à droite), "Compte courant" (avec la mise à jour de mon logiciel, cela remplace Encaisse, mais ce n'est pas un problème), "comptes clients", "comptes fournisseurs"

    J'ai eu 30 min pour y voir donc je vais continuer lundi prochain merci encore.

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

Discussions similaires

  1. extraction de données a partir d'un fichier XML
    Par spyder14 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 19/11/2010, 10h05
  2. Copier des données selon conditions
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2009, 17h15
  3. Recuperation de données selon condition
    Par gescolino dans le forum Requêtes
    Réponses: 11
    Dernier message: 09/02/2009, 02h25
  4. Réponses: 11
    Dernier message: 28/08/2007, 14h06
  5. [XQuery] Base Données XML : Jointure entre les fichiers
    Par Nadah dans le forum XQUERY/SGBD
    Réponses: 3
    Dernier message: 27/04/2007, 09h33

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