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 :

Extraire des données avec formule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut Extraire des données avec formule
    Bonjour à tous,

    Voici un extrait du code vba

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       Do While ActiveCell.Value <> ""
     
            Bidule= ActiveCell.Value
            Sheets("Chouette").Copy After:=Sheets(1) 'Créer une nouvelle feuille à partir du modèle
            ActiveSheet.Name = Bidule 'nomme la nouvelle feuille avec le nom du bidule
            Range("AQ2").Value = Bidule ' initialise la tabmle de critère avec le nom du bidule
            Range("Mabase").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
            "AQ1:AQ2"), CopyToRange:=Range("A1:AP1"), Unique:=False 'extrait les données du service
    Alors, cette macro créé un nouvel onglet à partir de l'onglet chouette et en copiant chaque donnée qui correspond a bidule.
    Le problème est que la colonne AP il existe une formule et je voudrais copier non pas le résultat mais la formule...

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La méthode AdvancedFilter ne copie que les valeurs donc si tu souhaites recopier les formules il faudra utiliser une autre méthode pour effectuer l'exportation soit en copiant la formule de la première ligne de chaque colonne de la iiste source pour les recopier sur les colonnes concernées de la liste cible soit en procédant à un filtre sur place et effectuer un Copier/Coller des lignes visibles.

    ps : J'avoue ne pas avoir compris l'utilisation de "bidule" ni la boucle Do while
    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
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    Merci pour votre réponse je vais voir ça alors
    Autre question ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]=RC[-41],"""",""Attention"")"
    Selection.AutoFill Destination:=Range("AP2:AP145")
    Comment tirer cette formule jusqu'à la dernière ligne sachant que la dernier ligne n'est pas tout le temps AP145.

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai ajouté à ma réponse "soit en procédant à un filtre sur place et effectuer un Copier/Coller des lignes visibles."
    Comment tirer cette formule jusqu'à la dernière ligne sachant que la dernier ligne n'est pas tout le temps AP145.
    La propriété CurrentRegion permet de connaître le nombre de lignes (Exemple : PremièreCelluleDeLaPlageCible.CurrentRegion.Rows.count)
    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
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    D'accord merci beaucoup je vais voir ça

  6. #6
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme le sujet m'intéressait, j'ai écrit la procédure.
    Après différents tests, la seule méthode qui tienne la route est le filtre sur place avec la méthode AdvancedFilter. L'exportation posant problème avec les formules si toutes les colonnes ne sont pas exportées et l'adaptation des formules devient alors une usine à gaz.
    L'exemple ci-dessous filtre sur place, copie les lignes visibles et supprime les colonnes non reprises dans la constante LabelExport (Attention que les colonnes utilisées dans les formules doivent être gardées)
    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
    Sub CopyByAdvancedFilter()
     Dim areaSource As Range, areaCriteria As Range, areaTarget As Range, c As Integer
     Const LabelExport As String = "Nom;Sexe;Date;Délai" ' Colonne à conserver
     With ThisWorkbook
      With .Worksheets("db")
       Set areaSource = .Range("A1").CurrentRegion
       Set areaCriteria = .Range("I1:I2")
      End With
      Set areaTarget = .Worksheets("Export").Range("A1")
     End With
     areaTarget.CurrentRegion.Clear
     ' Filtre sur place
     With areaSource
     .AdvancedFilter xlFilterInPlace, areaCriteria
     .SpecialCells(xlCellTypeVisible).Copy Destination:=areaTarget
     End With
     ' Supprime les colonnes à ne pas exporter
     With areaTarget.CurrentRegion
      For c = .Columns.Count To 1 Step -1
       If InStr(LCase(LabelExport), LCase(.Cells(1, c))) = 0 Then .Columns(c).Delete
      Next
     End With
     areaSource.Worksheet.ShowAllData ' Efface le filtre
     Set areaSource = Nothing: Set areaCriteria = Nothing: Set areaTarget = Nothing
    End Sub
    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

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/06/2009, 08h23
  2. Extraire des données d'un fichier .csv avec C++
    Par cre31400 dans le forum C++Builder
    Réponses: 14
    Dernier message: 08/07/2008, 10h25
  3. [Débutante] Extraire des données à partir d'un fichier html avec xsl
    Par sab_etudianteBTS dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/03/2008, 09h10
  4. Réponses: 8
    Dernier message: 06/03/2008, 16h32
  5. Réponses: 5
    Dernier message: 06/02/2008, 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