XL 2010 Extraction d'une base de donnée vers une autre feuille excel

Inesss

XLDnaute Nouveau
Bonjour,

Je suis débutante en excel VBA et depuis hier je cherche vainement sur le net et sur ce forum un code bouton VBA qui me permet de faire l'extraction des données d'une feuille à une autre selon un critère.

Vous trouvez ci joint mon fichier Excel avec plus de détails.
Merci à vous
 

Pièces jointes

  • extraction2.xlsm
    47.9 KB · Affichages: 65

thebenoit59

XLDnaute Accro
Re : Extraction d'une base de donnée vers une autre feuille excel

Bonjour Iness.
Je te propose le code ci-dessous :

Code:
Sub Extraction()
Dim Pays As String, Produit As String
Dim t, t1
Dim d As Object
Dim col As Integer, i As Integer, k As Integer

'Nous enregistrons les critères
With Sheets("Home")
    Pays = .[b12].Value
    Produit = .[d12].Value
End With

'Nous nous plaçons dans la feuille selon le pays
With Sheets(Pays)
    'On enregistre sous forme de tableau la liste des éléments
    t = .Range("a4:r" & .[r65000].End(xlUp).Row)
    'Nous cherchons la colonne correspond au Produit
    col = WorksheetFunction.Match(Produit, .Rows(3), 0)
    If col = 0 Then MsgBox "Produit non répertorié": Exit Sub
    'Nous allons mettre sous index les lignes avec "Oui" pour le produit en question
    Set d = CreateObject("scripting.dictionary")
        k = 0 'Nous ajoutons un compteur pour connaître le nombre de lignes avec le produit
        For i = LBound(t) To UBound(t)
            If t(i, col) = "Oui" Then d(1) = d(1) & i & ":": k = k + 1
        Next i
        If k = 0 Then MsgBox "Aucune entreprise ne vend " & Produit & " en " & Pays: Exit Sub
    'Nous extrayons du premier tableau les lignes répondant au critère
    t1 = Application.Index(t, Application.Transpose(Split(d(1), ":")), Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18))
End With

With Sheets("Extraction")
    i = .[c65000].End(xlUp).Row + 1
    'On ajoute le tableau dans la feuille extraction
    .Range("a" & i).Resize(UBound(t1) - 1, 18).Value = t1
End With
End Sub

Je te laisse l'étudier, et si tu as des questions j'y répondrai.
 

mutzik

XLDnaute Barbatruc
Re : Extraction d'une base de donnée vers une autre feuille excel

Bonjour

Il serait plus indiqué de :
- mettre toutes les données dans une seule feuille en rajoutant une colonne 'Pays'
- Filtrer les données dans cette feuille
 

Inesss

XLDnaute Nouveau
Re : Extraction d'une base de donnée vers une autre feuille excel

Merci pour votre réponse rapide et qui marche très bien.
Etant donnée que je ne suis pas expert en vba , ceci m'a paru un peu compliqué à comprendre comme il se doit mais pour moi l'essentiel que ça marche à merveille.
Cependant j'ai quelques questions :
1/concernant la ligne <<Nous extrayons du premier tableau les lignes répondant au critère
t1 = Application.Index(t, Application.Transpose(Split(d(1), ":")), Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18))
End With >>
Si le nombre d'entreprise trouvé selon le critère sectionné dépasse le 18 est ce que cela reste fonctionnel ? Je ne veux pas de limite concernant la taille de tableau exporté , parce que selon le critère choisi le nombre d'entreprise peut varier de 0 jusqu'au le nbr max de ligne en excel .

2/Aussi si le produit n'existe pas dans les colonnes le message box ne s'affiche pas mais plutôt j'ai le message d'erreur de débogage.

3/A chaque nouvelle extraction j'ai besoin de vider la feuille depuis la ligne 3 avant de commencer l'extraction sinon je risque d'avoir les données de la précédente extraction

Merci encore une fois !
 
Dernière modification par un modérateur:

Inesss

XLDnaute Nouveau
Re : Extraction d'une base de donnée vers une autre feuille excel

Bonjour
@Mutzik,
Merci pour votre réponse. En fait , j'ai besoin que ces base de données soient par pays , sinon (dans le cas ou "tout dans la même feuille") ça me fera un autre travail d'extraction par pays.
@BOISGONTIER
Merci je vais jeter un coup d’œil
 

thebenoit59

XLDnaute Accro
Re : Extraction d'une base de donnée vers une autre feuille excel

Je te laisse étudier la fonction Index plus en détails avec l'aide fournie dans Visual Basic.
Mais le dernier élément correspond aux colonnes, le nombre de colonnes actuel est de 18.
L'élément lignes est Application.Transpose(Split(d(1), ":")).
 

Inesss

XLDnaute Nouveau
Re : Extraction d'une base de donnée vers une autre feuille excel

Merci pour votre retour .
En gros , cava j'ai compris.
Pour le point 3 de ma réponse précédente cava j'ai ajouté le code :
Worksheets("extraction").Range("A3:R65000").ClearContents

Il reste le problème de message de débogage qui s'affiche lorsque le produit n'existe pas !
 

thebenoit59

XLDnaute Accro
Re : Extraction d'une base de donnée vers une autre feuille excel

J'ai fais une c****** dans mon code.
En remplaçant le code :
Code:
   'Nous cherchons la colonne correspond au Produit
   col = WorksheetFunction.Match(Produit, .Rows(3), 0)
    If col = 0 Then MsgBox "Produit non répertorié": Exit Sub

Par :
Code:
'Nous cherchons la colonne correspond au Produit
    On Local Error Resume Next
    col = WorksheetFunction.Match(Produit, .Rows(3), 0)
    If Error <> 0 Then MsgBox "Produit non répertorié": Exit Sub
 

Inesss

XLDnaute Nouveau
Re : Extraction d'une base de donnée vers une autre feuille excel

Désolé de revenir encore une fois .
En fait non le problème n'est pas résolu puisque pour tous les produits même ceux qui existe le même msg de "Produit non répertorié"
s'affiche!
 

thebenoit59

XLDnaute Accro
Re : Extraction d'une base de donnée vers une autre feuille excel

En essayant ainsi :

Code:
    If Not IsError(Application.Match(Produit, .Rows(3), 0)) Then
        col = WorksheetFunction.Match(Produit, .Rows(3), 0)
        Else: MsgBox "Produit non répertorié": Exit Sub
    End If

Il va vraiment falloir que j'apprenne à gérer les erreurs ...
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma