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 :

Copie de valeurs dans un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Par défaut Copie de valeurs dans un tableau
    Bonjour à tou·te·s,

    J'ai un tableau qui contient la liste de toutes les factures dans tableau "Liste_Factures". Le numéro de client est dans la première colonne. Je veux saisir le numéro de mon client dans un Userform, et que mon programme génère un fichier (à partir d'un modèle nommé "Factures"), dans lequel il copie toutes les données de toutes les factures concernant mon client. Voici donc mon code, pour tester l'extraction du client numéro 0123456789 :

    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
    Dim factures1 As Workbook
        Dim invoice As Range
     
        Set factures1 = Workbooks.Add("C:\Users\MonUser\Documents\Modèles Office personnalisés\Factures.xltx")
     
        ThisWorkbook.Activate
        Application.ScreenUpdating = False
        For Each invoice In Range("Liste_Factures").Rows
     
            If invoice.Range("A1") = "0123456789" Then
                invoice.Copy
                Windows(factures1.Name).Activate
                Range("Liste_Factures").ListObject.ListRows.Add
                Range("Liste_Factures").End(xlDown).PasteSpecial xlPasteValues
                ThisWorkbook.Activate
            End If
        Next
        Application.ScreenUpdating = True
        Application.CutCopyMode = False
     
        Filter_Form.Hide
    Non seulement ce code ne fonctionne pas, mais en plus, ayant testé la boucle avec un code qui marche (collage dans la même ligne du tableau cible), j'ai pu constater que l'instruction Application.ScreenUpDating = False ne semble pas produire son effet.

    Le problème semble donc venir de la méthode End(xlDown), mais je n'en suis pas certain. Je suis un peu perdu.
    Merci par avance de votre aide.

    Cordialement,

  2. #2
    Membre confirmé Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Par défaut
    ...du coup, je ne me souviens même plus comment je faisais pour tout coller sur la même ligne. Plus rien ne fonctionne. Mais je me souviens que le Application.ScreenUpDating=False n'a pas empêché l'écran de clignoter. Toujours est-il que je galère depuis ce matin, je n'avance pas. Je ne sais pas comment faire le copié-collé entre les deux tableaux.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    déjà manuellement via un simple filtre (ou encore un filtre avancé), l'automatiser ensuite via l'Enregistreur de macro,
    bref, Penser Excel Avant VBA …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    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
    Bonsoir
    J'arrive à comprendre ta requête : comment sont organisées tes données??? qu'est ce que tu cherche à faire
    et pour Application.ScreenUpdating = False ce n'est que pour arreter l'affichage pour accélérer le temps d'exécution...oublie la

  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
    peut être une piste à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub chercher()
    Dim plage As Range
    Set plage = Sheets("Liste_Factures").Range("A1:A" & [A65536].End(xlUp).Row)
    codrecherché = ComboBox1.Value
    j = 2
    For Each cell In plage
     If cell.Value = codrecherché Then
       Sheets("Factures").Cells(j, 1) = Cells(cell.Row, 2)
       Sheets("Factures").Cells(j, 2) = Cells(cell.Row, 3)
     End If
      j = j + 1
        Next cell
    End Sub

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Salut Ben,

    avec un filtre, une boucle est inutile, c'est plus rapide et en moins de lignes de code !

  7. #7
    Membre confirmé Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Par défaut
    Bonjour,

    Marc-L : Ma chef veut qu'un fichier soit généré automatiquement, prêt à être édité et envoyé. Je dois donc faire une macro VBA. Le but, c'est d'extraire les données du tableau via une macro. J'avais d'abord fait une interface qui gérait des filtres, comme tu me suggères, mais elle veut qu'on génère un nouveau fichier Excel déjà mis en forme, que l'utilisateur pourra enregistrer ou pas sous un nom de son choix. Personnellement, je subodore que partir de ce filtre ne sera pas très économique en termes de ressources ou en terme de code. D'ailleurs, ça ne résoudra pas mon problème : puisqu'il faut générer un fichier, il faudra bien à un moment ou à un autre copier-coller les lignes.

    BENNASR : Le fichier source ayant plus de quarante mille lignes, ça fait un peu mal aux yeux pendant la copie, parce qu'il passe d'une fenêtre à l'autre. Cette fonction marche bien ailleurs dans mon code, je ne comprends pas pourquoi ça ne marche pas ici. Comme je veux apprendre et m'améliorer dans ce langage, j'aimerais juste comprendre pourquoi ça ne fonctionnait pas.

    Merci de votre collaboration. On continue de chercher... A bientôt.

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Et non !   Utiliser les fonctionnalités internes d'Excel en VBA est bien souvent plus rapide
    et plus facile à maintenir que toute usine à gaz en pur VBA surtout à base de boucle !
    Car la copie du résultat d'un filtre se fait en une seule fois
    alors que via une boucle c'est ligne par ligne, donc c'est bien plus gourmand !

    Via un filtre il faut moins de 10 lignes de code, en général autour de 5 …

Discussions similaires

  1. [Tableaux] Extraction de valeur dans un tableau
    Par pirouette_07 dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2005, 17h54
  2. [LG] Valeur dans un tableau
    Par hunter dans le forum Langage
    Réponses: 3
    Dernier message: 16/06/2005, 13h59
  3. [tableau]Valeur dans un tableau
    Par kisscool31 dans le forum Collection et Stream
    Réponses: 30
    Dernier message: 17/05/2005, 09h45
  4. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41
  5. Décaler des valeurs dans un tableau
    Par sh2003 dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2004, 16h01

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