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 :

Code vba rapide avec la rechercheV pour prendre des données depuis une feuille et les coller dans une autre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Juin 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : etudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 4
    Par défaut Code vba rapide avec la rechercheV pour prendre des données depuis une feuille et les coller dans une autre
    Bonjour à tous le forum. J'espère que vous allez tous bien. Je suis nouveau dans le forum by the way.

    Je dois développer une macro dans le cadre du développement des outils de mon entreprise. Il s'agit du suivi des créances clients. L'outil doit permettre de mettre à jour les soldes des comptes clients, tout en gardant les montants historiques des quatre derniers jours. Bon assez d'explications, mon problème est le suivant:

    Nom : Capture.PNG
Affichages : 140
Taille : 73,7 Ko
    - le classeur Excel contient deux feuilles intitulées respectivement "Comptes clients " et "Comptes histo". Les deux feuilles ont la même structure: ils contiennent des tableaux avec des colonnes intitulées *numéro du compte (col. E), *intitulé du compte, 4 colonnes *montants (col. K à O) avec les dates corresp. sur les entêtes . On doit être capable de mettre à jour les soldes dans "Comptes clients" et reprendre les soldes anciens correspondant dans les colonne K à N de "Comptes histo" et les coller dans la feuille "Comptes clients" à côté des soldes à jour. Pour cette dernière tâche j'ai trouvé le code ci-dessous sur internet, qui utilise la recherchev.


    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
    Sub prendredonnées()
     
        Dim plage As Range, plrech As Range, C As Range, Teste
            With Sheets("Comptes Clients")
                Set plage = .Range(.Cells(15, 5), .Cells(.Rows.Count, 5).End(xlUp))
            End With
            With Sheets("Comptes histo")
                Set plrech = .Range(.Cells(15, 5), .Cells(.Rows.Count, 15).End(xlUp))
            End With
                For Each C In plage
                    Teste = Application.VLookup(C.Value, plrech, 6, False)
                    If Not IsError(Teste) Then
                            C.Offset(, 7).Value = Teste
                    Else
                            C.Offset(, 7).Value = "0"
                    End If
                Next C
    End Sub
    Cependant, l'exécution est diablement lente (30 minutes minimum, plus qu'il ne prend pour le traitement manuel A noter que la taille des comptes est volumineux (près de 65 000 lignes).
    Si vous pouviez me suggérer une autre façon de faire, ça serait vraiment libérateur.

    Merci d'avance.
    Images attachées Images attachées   

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi une boucle sur chaque ligne.
    En VBA, il est possible d'écrire une seule ligne de code qui écrit la même formule dans la colonne entière
    Il suffit d'écrire la formule manuellement et après l'avoir testée, l'insérer dans le code VBA

    Voir mes deux billets sur le sujet
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Juin 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : etudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 4
    Par défaut
    Bonjour, merci de votre réponse.
    Mais si j'essayais cela, comment vais-je spécifier l'argument valeur cherchée de la rechercheV? qui change en fonction du numero de ligne.
    Dans la première formule, je pouvais faire C.value.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub prendredonnées()
     
        Dim plage As Range, plrech As Range, C As Range, Teste
            With Sheets("Comptes Clients")
                Set plage = .Range(.Cells(15, 5), .Cells(.Rows.Count, 5).End(xlUp))
            End With
            With Sheets("Comptes histo")
                Set plrech = .Range(.Cells(15, 5), .Cells(.Rows.Count, 15).End(xlUp))
            End With
     
                plage.Offset(, 7).formula= "=VLookup(plage.Value, plrech, 6, False)"
     
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mais si j'essayais cela, comment vais-je spécifier l'argument valeur cherchée de la rechercheV? qui change en fonction du numero de ligne.
    Votre question prouve que vous n'avez pas lu les deux billets que je vous ai suggéré de consulter
    Avez-vous essayé d'écrire cette formule manuellement dans excel ?

    Petite remarque
    Si je lis votre code, vous définissez votre plage de la feuille nommée "Comptes Clients" à partir de la colonne 5 de la ligne 5 or si je me réfère à votre illustration, la première ligne des données du tableau présente dans cette feuille commence en ligne 13 et pour la plage de l'autre feuille cela me semble également incohérent entre l'illustration et votre code.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour MYBAD, Philippe Tulliez, la forum
    A mon modeste avis, ce n'est pas la bonne conception pour gérer tes clients, d'ailleurs pourquoi les dates comme titre de colonne !!!!
    il suffit d'insérer une seule colonne nommée DATE et tu insère la date devant chaque mouvement
    Aussi je ne comprends pas :
    1 - Pourquoi deux onglets, une seule onglet et tu filtre avec une colonne date ne suffit pas ?
    2 - Pourquoi du VBA : il suffit de travailler avec un tableau structuré et tu insère un tableau croisée dynamique avec des segments et tu aura tout ce qui tu cherches avec une belle présentation

  6. #6
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Juin 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : etudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 4
    Par défaut
    Bonjour Bennasr.

    Il se pourrez que j'aie pas été clair dans mes explications.

    Merci pour votre contribution quand même.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Juin 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : etudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2022
    Messages : 4
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Votre question prouve que vous n'avez pas lu les deux billets que je vous ai suggéré de consulter
    Avez-vous essayé d'écrire cette formule manuellement dans excel ?
    Bonjour,

    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
     
     
    Sub prendredonnees()
     
        Dim plage As Range, plrech As Range, C As Range
        'déclaration des variables formule et valeur cherchée
        Dim myFormula As String, newFormula As String, Vcher As Range
     
           With Sheets("Comptes Clients")
                Set plage = .Range(.Cells(15, 5), .Cells(.Rows.Count, 5).End(xlUp))
            End With
            With Sheets("Comptes histo")
               Set plrech = .Range(.Cells(15, 5), .Cells(.Rows.Count, 15).End(xlUp))
            End With
     
            Set Vcher = Range("E15")
            Set Vcher = Vcher.Offset(1, 0)
            myFormula = "=VLookup(<Vcherche>, <Precherche>,7, False)"
            newFormula = Replace(Replace(myFormula, "<Precherche>", plrech.Address), "<Vcherche>", Vcher.Address)
     
         plage.Offset(, 7).Formula = newFormula
                     If IsError(newFormula) Then
                         plage.Value = "0"
                    End If
     
    End Sub
     
    End Sub
    J'ai revu mon code, qui marche bien à la remarque près que je ne sais pas comment rendre dynamique la référence de la cellule contenant la valeur cherchée. J'ai bien lu vos deux articles Phillipe, je vous en remercie, mais je suis coincé...


    Petite remarque

    Si je lis votre code, vous définissez votre plage de la feuille nommée "Comptes Clients" à partir de la colonne 5 de la ligne 5 or si je me réfère à votre illustration, la première ligne des données du tableau présente dans cette feuille commence en ligne 13 et pour la plage de l'autre feuille cela me semble également incohérent entre l'illustration et votre code.
    Vous inquiétez pas, c'est les bonnes références que j'ai mis. La capture que je vous ai envoyée est un peu truqué pour la confidentialité.
    Merci.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2016, 10h55
  2. Utilisation de RechercheV pour mise à jour données d'une feuille
    Par RastaBomboclat dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/05/2015, 10h53
  3. Réponses: 0
    Dernier message: 29/08/2014, 15h33
  4. Réponses: 2
    Dernier message: 25/06/2009, 09h23

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