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 selon conditions [XL-2007]


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
    Inscrit en
    Juin 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 63
    Par défaut extraction selon conditions
    Bonjour le forum,

    je bloque :
    je souhaite copier plusieurs cellules vers des feuilles différentes en fonction du premier chiffre de l'une d'entre elle...

    voici le bout de code :
    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
    Sub uplod()
     
    Dim cell As Range, plage As Range
    Dim derlig As Long, newlig As Long
     
    With Worksheets("BASE_AM")
    .Range("a2:d3000").Clear
     
    'with Worksheets("BASE_CB")
    '.Range("a2:d3000").Clear
    ' end with
     
    With Worksheets("MACROS_TRI")
    derlig = Range("A" & Rows.Count).End(xlUp).Row
    Set plage = Range("A2:A" & derlig)
    End With
     
    newlig = 1
       For Each cell In plage
             If Left(cell.Offset(0, 9).Value, 1) = "6" Then
               .Range("A" & newlig).Value = cell.Offset(0, 2).Value
               .Range("B" & newlig).Value = cell.Offset(0, 3).Value
               .Range("C" & newlig).Value = cell.Offset(0, 10).Value
               .Range("D" & newlig).Value = cell.Offset(0, 9).Value
         Else
            If Left(cell.Offset(0, 9).Value, 1) = "8" Then
                .Range("A" & newlig).Value = cell.Offset(0, 2).Value
                .Range("B" & newlig).Value = cell.Offset(0, 3).Value
                .Range("C" & newlig).Value = cell.Offset(0, 10).Value
                .Range("D" & newlig).Value = cell.Offset(0, 9).Value
             End If
           End If
         newlig = newlig + 1
     
     
        Next cell
        Set plage = Nothing
    End With
    End Sub
    J'aimerais que ma seconde condition copier les cellules vers la feuille BASE_CB mais après moulte essais je n'arrive pas à définir la feuille cible

    Quelqu'un peut-il m'aider svp ?

  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,
    Je pencherais pour une solution basée sur le Filtre avancé (élaboré).
    Il faut définir une zone Data, une zone critères et il y a une option Copié vers
    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
    Inscrit en
    Juin 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 63
    Par défaut
    Bonjour Philippe,

    merci pour cette réponse.
    Je pensais sinon le faire en 2x, avec le même premier bloc with mais en changeant simplement la de nom de feuille et faire un call en fin de premiere procédure pour que ce qui n'est pas pris dans le première (le if left = 6) soit finalement repris dans la seconde...

    parce que j'avoue que la zone date et zone critère je ne sais pas trop de quoi il s'agit...

  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,
    Citation Envoyé par zealot37 Voir le message
    parce que j'avoue que la zone date et zone critère je ne sais pas trop de quoi il s'agit...
    Il ne s'agit pas de zone date mais de zone Data, c'est à dire la table de données
    Pour utiliser un filtre élaboré, il faut au moins une table de données et une zone de critères.
    1. La table de données doit avoir en première ligne les étiquettes de colonne.
    2. La zone de critère doit avoir en première ligne des étiquettes de colonnes et au moins une ligne avec un ou plusieurs critères.
    Par exemple si dans ta table de données, tu as une colonne qui contient le Chiffre d'affaires et dont l'étiquette de colonne se nomme CA et que tu veux extraire toutes les données dont le chiffre d'affaires est supérieur à 1500.
    Dans la zone des critères, qui se situe par exemple dans une feuille nommée Paramètre. En A1, tu vas répéter le nom de l'étiquette CA et en A2, tu écris >1500.
    Si c'est le seul critère, on définira comme zone de critère Paramètre!A1:A2.
    Ensuite pour l'exportation des données répondant aux critères, on référencera la zone Copier vers
    Tout cela est transposable en code VBA.

    Bonsoir,
    Voir ici un lien traitant du même sujet avec un code exemple.
    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
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonsoir

    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
     
    Sub uplod()
     
    Dim cell As Range, plage As Range
    Dim derlig As Long, newlig As Long
     Dim feuille1 As worksheet, feuille2 As worksheet
    feuille1 = "ce que tu veux ici"
    feuille2 = "ce que tu veux ici"
     
    With Worksheets("BASE_AM")
    .Range("a2:d3000").Clear
     
    With Worksheets("MACROS_TRI")
    derlig = Range("A" & Rows.Count).End(xlUp).Row
    Set plage = Range("A2:A" & derlig)
    End With
     
    newlig = 1
     
     
       For Each cell In plage
             If Left(cell.Offset(0, 9).Value, 1) = "6" Then
              feuille1 .Range("A" & newlig).Value = cell.Offset(0, 2).Value
               feuille1.Range("B" & newlig).Value = cell.Offset(0, 3).Value
               feuille1.Range("C" & newlig).Value = cell.Offset(0, 10).Value
               feuille1.Range("D" & newlig).Value = cell.Offset(0, 9).Value
         Else
            If Left(cell.Offset(0, 9).Value, 1) = "8" Then
               feuille2 .Range("A" & newlig).Value = cell.Offset(0, 2).Value
                feuille2.Range("B" & newlig).Value = cell.Offset(0, 3).Value
                feuille2.Range("C" & newlig).Value = cell.Offset(0, 10).Value
                feuille2.Range("D" & newlig).Value = cell.Offset(0, 9).Value
             End If
           End If
         newlig = newlig + 1
     
     
        Next cell
        Set plage = Nothing
    End With
    End Sub
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  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,
    Un autre lien qui traite du même sujet et qui n'est pas basé sur le filtre avancé avec code VBA à la clé.
    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2012
    Messages : 63
    Par défaut
    Bonsoir,

    Patrick, merci pour le code corrigé. Il me semble avoir testé cette solution sans succès. Je refais le test demain avec mon fichier et reviens donné le résultat !!

    Philippe, merci pour les liens, je vais creuser de ce coté aussi et m'instruire un peu (beaucoup...)

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

Discussions similaires

  1. Extraction de données selon conditions entre 2 fichiers
    Par kemherar dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/05/2015, 15h00
  2. [XL-2007] Extraction selon condition
    Par miloud54000 dans le forum Excel
    Réponses: 3
    Dernier message: 14/08/2014, 23h06
  3. [VB.NET] Changer de classe selon condition
    Par daner06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/10/2004, 10h04
  4. DLLs chargées selon condition
    Par Benjamin GAGNEUX dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 12/08/2004, 18h14

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