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 :

Recherche et importation de données avec la methode autofilter [XL-2010]


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
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 29
    Par défaut Recherche et importation de données avec la methode autofilter
    Bonjour le forum,
    Je viens vers vous car je suis un peu en difficulté je cherche désespérément une manière de pouvoir adapter un code que j’ai trouvé sur le forum réalisé par « Mercatog » le principe et bien et je l’ai pratiquement compris mais je n’arrive pas à l’adapter.
    Je vous explique j’ai deux bases de données une ou je veux importer mes données qui s’appelle « Pilotage quotidien Chafik » et celle d’où je veux apporter les données « Fichier Stock » dans un premier temps je voudrais réaliser un filtre sur la basse d’où j’importe mes données « Fichier Stock » sur la colonne « D » qui est le code gestion les condition du filtre se trouve dans la base « Pilotage quotidien Chafik » feuil PARAMETRES colonnes L28 à L39 pour qu’il y ait moins de ligne a traiter méthode autofilter puis importer des données par rapport à un code article qui se trouve en colonne « B5 :B » dans ma basse « Pilotage quotidien Chafik » et en « B2 :B » dans ma basse « Fichier Stock » et renvoyer les valeurs des colonnes « AH,AK,AN,AQ,AT,AW,AZ,BC,BF,BI,BL,BO,H » de la basse « Fichier Stock » respectivement vers les colonnes « X,Y,Z,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ » de ma basse « Pilotage quotidien Chafik »
    J’ai essayé d’adapter ce code mes pas évident je n’y arrive pas, alors si quelqu’un peut m’aider sa serait super

    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
    Option Explicit
    Sub Extraction()
     
     
    Dim WB_Principal, classeur3 As Workbook
    Dim Ws, feuil2, feuil3 As Worksheet
    Dim LastLig, LastLig1 As Long
    Dim i As Byte
     
     Application.ScreenUpdating = False
     
        ' Amène le classeurs cible en avant plan, celui-ci devient le [ ActiveWorkbook ]
                Set WB_Principal = ActiveWorkbook
            Set feuil2 = WB_Principal.Worksheets("J+5")
            Set feuil3 = WB_Principal.Worksheets("PARAMETRES")
     
     Set classeur3 = Workbooks.Open("C:\Users\A172243\Desktop\Chafik\Fichier Stock.xlsx", _
            False, True)
    Set Ws = classeur3.Worksheets("Feuil1")
     
    With feuil2
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        LastLig1 = .Cells(.Rows.Count, "D").End(xlUp).Row
        With Ws.Range("A1:BO" & LastLig)
            .AutoFilter Field:=4, Criteria1:=feuil3.Range("D5")
            For i = 5 To LastLig1
            .AutoFilter Field:=2, Criteria1:=feuil2.Range("B5" & i)
            If Ws.Range("B2:B" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
                Ws.Range("AH2:BO" & LastLig).SpecialCells(xlCellTypeVisible).Copy feuil2.Range("X" & i)
            Else
                feuil2.Range("X" & i & ":BO" & i).ClearContents
            End If
        Next i
        End With
        .AutoFilterMode = False
    End With
    Set Ws = Nothing
    End Sub
    Je vous joins les deux fichiers peut être que ce sera plus simple de comprendre

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Ceci ne répond pas à ta/tes questions, mais prends-en note
    Les déclarations de variables, comme tu le fais n'est pas bonne.
    Si tu ne mets pas explicitement le type de variable, celle-ci devient Variant par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim WB_Principal, classeur3 As Workbook  ' WB_Principal est Variant
    Dim Ws, feuil2, feuil3 As Worksheet  'Ws et feuil2 sont Variant
    Dim LastLig, LastLig1 As Long  'LastLig est Variant
    La bonne méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim WB_Principal As Workbook, classeur3 As Workbook
    Dim Ws As Worksheet, feuil2 As Worksheet, feuil3 As Worksheet
    Dim LastLig As Long, LastLig1 As Long

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 29
    Par défaut
    Bonjour parmi,

    Je savais pas, je pensé que sa revener au même merci de me le rappeller sa m'évitera de m'enméler encore plus les pinceaux

    En attendent je continue mes recherches et mes tentatives d'adaptation!

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 29
    Par défaut
    Bonjour tout le monde,

    J'ai continuer à éssayer de faire marcher mon code hier soiret j'y suis presque mais j'ai un probléme ca me copie rien, et j'ai une erreur qui s'affiche quand il ne trouve pas de reférence équivalente je vous joins le nouveau fichier "Pilotage Quotidien chafik" et le "Fichier stock" je l'ai déjà posté en ésperant que quelqu'un vera mon appelle "HELP" et Mercatog qui comprendra peut-être mieux le principe car je reprend sont 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
    40
    41
    42
    Option Explicit
    Sub Extraction()
     
    Dim WB_Principal As Workbook, classeur3 As Workbook
    Dim Ws As Worksheet, feuil2 As Worksheet, feuil3 As Worksheet
    Dim LastLig As Long, LastLig1 As Long
    Dim i As Long
     
     
     Application.ScreenUpdating = False
     
        ' Amène le classeurs cible en avant plan, celui-ci devient le [ ActiveWorkbook ]
                Set WB_Principal = ActiveWorkbook
            Set feuil2 = WB_Principal.Worksheets("J+5")
     
     Set classeur3 = Workbooks.Open("C:\Users\A172243\Desktop\Chafik\Fichier Stock.xlsx", _
            False, True)
    Set Ws = classeur3.Worksheets("Feuil1")
     
    With Ws
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "AH").End(xlUp).Row
        LastLig1 = .Cells(.Rows.Count, "B").End(xlUp).Row
        With Ws.Range("A1:CZ" & LastLig)
     
            .AutoFilter Field:=4, Criteria1:=Array( _
            "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "280", "289"), Operator _
            :=xlFilterValues
     
            For i = 5 To feuil2.Range("B65536").End(xlUp).Row
            .AutoFilter Field:=2, Criteria1:=feuil2.Range("B" & i)
            If Ws.Range("B5:B" & LastLig1).SpecialCells(xlCellTypeVisible).Count > 1 Then
                Ws.Range("AH2:BO" & LastLig).SpecialCells(xlCellTypeVisible).Copy feuil2.Range("X" & i & ":AI" & i)
            Else
                feuil2.Range("X" & i & ":AI" & i).ClearContents
            End If
        Next i
        End With
        .AutoFilterMode = False
    End With
    Set Ws = Nothing
    End Sub
    Merci d'avance!!!Pièce jointe 162813

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 29
    Par défaut
    Toujours dans la panade j'ai une (d'exécution 1004) car a un moment entre les deux il y a des qui existe dans ma base "pilotage Quotidien CHAFIK" et pas dans ma base "Fichiers Stock" donc ca bloc, voici le code avec quelque modifications! Je continu mon périple et vous tiens informé en espérant que d'ici il y ait quelques lumières pour m'éclairer !!!
    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
    42
    43
    44
    45
    46
    47
    Option Explicit
    Sub Extraction()
     
    Dim WB_Principal As Workbook, classeur3 As Workbook
    Dim Ws As Worksheet, feuil2 As Worksheet, feuil3 As Worksheet
    Dim LastLig As Long, LastLig1 As Long
    Dim i As Long
    Dim maPlage As Range, maPlage1 As Range
     
     Application.ScreenUpdating = False
     
        ' Amène le classeurs cible en avant plan, celui-ci devient le [ ActiveWorkbook ]
                Set WB_Principal = ActiveWorkbook
            Set feuil2 = WB_Principal.Worksheets("J+5")
     
     Set classeur3 = Workbooks.Open("C:\Users\A172243\Desktop\Chafik\Fichier Stock.xlsx", _
            False, True)
    Set Ws = classeur3.Worksheets("Feuil1")
     
    With Ws
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "B").End(xlUp).Row
        With Ws.Range("A1:CZ" & LastLig)
     
            .AutoFilter Field:=4, Criteria1:=Array( _
            "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "280", "289"), Operator _
            :=xlFilterValues
     
                    For i = 5 To feuil2.Range("D65536").End(xlUp).Row
     
            .AutoFilter Field:=2, Criteria1:=feuil2.Range("B" & i)
            If Ws.Range("B5:B" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
     
                Set maPlage = Ws.Range("AH2:AH,AK2:AK,AQ2:AQ,AT2:AT,AW2:AW,AZ2:AZ,BC2:BC,BF2:BF,BI2:BI,BL2:BL,BO2:BO,H2:H" & LastLig)
                Set maPlage1 = feuil2.Range("X5:X,Y5:Y,Z5:Z,AA5:AA,AB5:AB,AC5:AC,AD5:AD,AE5:AE,AF5:AF,AG5:AG,AH5:AH,AI5:AI,AJ5:AJ" & LastLig)
     
                maPlage.SpecialCells(xlCellTypeVisible).Copy Destination:=maPlage1
            Else
                feuil2.Range("X" & i & ":AJ" & i).ClearContents
            End If
        Next i
        End With
        .AutoFilterMode = False
    End With
       Exit Sub
    Set feuil2 = Nothing
    End Sub
    Amicalement

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Je ne pense pas que tu puisse faire ceci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Set maPlage = Ws.Range("AH2:AH,AK2:AK,AQ2:AQ,AT2:AT,AW2:AW,AZ2:AZ,BC2:BC,BF2:BF,BI2:BI,BL2:BL,BO2:BO,H2:H" & LastLig)
                Set maPlage1 = feuil2.Range("X5:X,Y5:Y,Z5:Z,AA5:AA,AB5:AB,AC5:AC,AD5:AD,AE5:AE,AF5:AF,AG5:AG,AH5:AH,AI5:AI,AJ5:AJ" & LastLig)
    Tu dois définir le nombre de lignes à chaque adresse et non pas une seule fois à la fin, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set maPlage = ws.Range("AH2:AH" & Lastlig, "AK2:AK" & Lastlig,....)

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

Discussions similaires

  1. Importation de données avec conditions
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 24/08/2007, 08h40
  2. [VBA-E]{débutant} Importation de données avec menu déroulant
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/04/2007, 17h02
  3. [RegEx] Rechercher n'importe quel nombre, avec exceptions
    Par alex.hitman dans le forum Langage
    Réponses: 6
    Dernier message: 27/03/2006, 20h23
  4. import de données avec BCP
    Par doudou10000 dans le forum Outils
    Réponses: 2
    Dernier message: 09/12/2005, 16h10
  5. [DTS] Import de données avec des doublons
    Par Hotchotte dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/03/2005, 14h19

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