Extraction d'une base de donnée via macro pour affichage dans un nouvel onglet

heitzmann_r

XLDnaute Nouveau
Bonjour

Je travaille sur une base de données que j’extrais chaque mois de notre système. J’utilise les données que je reprends dans un autre onglet, et que je mets en forme à ma guise.
Cette base étant importante, cette extraction (jusqu’ici manuelle) me prend un temps considérable. J’ai essayé de passer via l’enregistreur de macro, mais je fais face à quelques soucis.

Mon idée était de faire une macro (sachant que je suis débutant, je précise !) qui me permettrait d’extraire ces infos et les affichés directement dans mon nouvel onglet.
En gros mon fichier me donne le taux de remplissage, commande par commande, pour tous mes clients.
Une ligne correspond à une commande. Mon souci, vient de là. D’UN MOIS à l’autre le nombre de commande traité par client peut varié, et je peux me retrouver avec de nouveaux clients.
La macro que j’ai enregistré ne fonctionne donc pas pour d’autre mois que celui sur lequel j’ai enregistrés la macro (c’est un peu con !). J’ai repris cette base que j’ai simplifié, et vous en ai extrait ma macro.

Sub Macro17()
'
' Macro17 Macro
'

'
Range("B2").Select
Selection.Copy
Sheets("Feuil1").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("A").Select
Selection.End(xlDown).Select
Range("E5:H5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil1").Select
Range("C2").Select
ActiveSheet.Paste
Sheets("A").Select
Range("B7").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil1").Select
Range("B3").Select
ActiveSheet.Paste
Sheets("A").Select
Selection.End(xlDown).Select
Range("E10:H10").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil1").Select
Range("C3").Select
ActiveSheet.Paste
Sheets("A").Select
Range("B12").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil1").Select
Range("B4").Select
ActiveSheet.Paste
Sheets("A").Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Range("E16:H16").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil1").Select
Range("C4").Select
ActiveSheet.Paste
Range("A49").Select
Sheets("A").Select
Range("B18").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil1").Select
Range("B5").Select
ActiveSheet.Paste
Sheets("A").Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Range("E54:H54").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil1").Select
Range("C5").Select
ActiveSheet.Paste

End Sub

Cette macro étant horrible, je vous joins le ficher ce qui vous permettra d'y voir un peu plsu clair.



Seriez vous en mesure de me dire où le bas blesse ? et que faire pour que cette macro s'applique à ma base, et ce, quelque soit la le nombre de client, ou de commande par client ?

Si quelque chose n’est pas clair ou qu’îl vous manque des éléments n’hésitez pas à revenir vers moi , je me ferais un plaisir de compléter.

D’avance un grand merci pour votre aide.

heitz
 

Pièces jointes

  • base de donnée.xlsm
    35.4 KB · Affichages: 54
  • base de donnée.xlsm
    35.4 KB · Affichages: 63

Victor21

XLDnaute Barbatruc
Re : Extraction d'une base de donnée via macro pour affichage dans un nouvel onglet

Bonjour, heitzmann_r.

Le premier conseil que je pourrais vous donner si vous persistez à l'idée du VBA, serait de "nettoyer votre base de donnée avant d'en envisager le traitement :
un enregistrement par ligne, et rien d'autre.
Sinon,, il me semble qu'un simple somme.si (ou plutôt deux) devrait suffire pour effectuer vos calculs. En effet :
=SOMME.SI(A!B:B;"QUATRE";A!F:F)
renvoie 16799.
 

youky(BJ)

XLDnaute Barbatruc
Re : Extraction d'une base de donnée via macro pour affichage dans un nouvel onglet

Bonjour tous,
Une macro que voici...

Bruno
Code:
Sub macopie()
k = 1
nom = [B2]
With Feuil3
.[A2:G10000].ClearContents
For lig = 2 To [B65536].End(3).Row
If Cells(lig, 2) <> "" And Cells(lig, 2) <> nom Then
k = k + 1
.Cells(k, 2) = nom
.Cells(k, 3) = Cells(lig - 2, 5) 'ou =cdbl(cells(lig-2,5))
.Cells(k, 4) = Cells(lig - 2, 6)
.Cells(k, 5) = Cells(lig - 2, 7)
.Cells(k, 6) = Cells(lig - 2, 8)
nom = Cells(lig, 2)
End If
Next
End With
End Sub

Edit: Dans la macro Feuil3 est le codeName et non le nom donné à l'onglet (voir en fenêtre projet)
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Extraction d'une base de donnée via macro pour affichage dans un nouvel onglet

RE, ma macro ne prenait pas le dernier nom.
voici une nouvelle version.
Bruno
Code:
Sub macopie()
k = 1
nom = [B2]
Cells([D65536].End(3).Row + 2, 2) = "zzzz"
With Feuil3
.[A2:G10000].ClearContents
For lig = 2 To [D65536].End(3).Row + 2
If Cells(lig, 2) <> "" And Cells(lig, 2) <> nom Then
k = k + 1
.Cells(k, 2) = nom
.Cells(k, 3) = Cells(lig - 2, 5) 'ou =cdbl(cells(lig-2,5))
.Cells(k, 4) = Cells(lig - 2, 6)
.Cells(k, 5) = Cells(lig - 2, 7)
.Cells(k, 6) = Cells(lig - 2, 8)
nom = Cells(lig, 2)
End If
Next
End With
Cells([D65536].End(3).Row + 2, 2) = ""
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Re : Extraction d'une base de donnée via macro pour affichage dans un nouvel onglet

Voici encore une nouvelle version plus adaptée et plus simple.
Code:
Sub macopie()
k = 1
With Feuil3  'à modifier si besoin c'est le CodeName et pas le nom mis à l'onglet
.[A2:G65000].ClearContents   'effacement Feuil3
For lig = 2 To [B65536].End(3).Row + 1 'boucle de haut en bas de la feuille active
If Cells(lig, 2) = "" Then
k = k + 1
.Cells(k, 2) = Cells(lig - 1, 2) 'mets nom
.Range("C" & k & ":F" & k).Value = Range("E" & lig + 2 & ":H" & lig + 2).Value 'copie les valeurs
lig = lig + 3
End If
Next
.Select
End With
End Sub

Bruno
 

heitzmann_r

XLDnaute Nouveau
Re : Extraction d'une base de donnée via macro pour affichage dans un nouvel onglet

Bonjour Victor21
Bonjour Youky

Un grand merci, tous les deux, pour avoir pris de votre temps pour m'aider à régler mon problème!
Ta Macro Youky fonctionne à merveille! Mille mercis. Sincèrement.

Tu m'as définitivement convaincu à me lancer dans l'apprentissage de la Vba. C'est tout simplement magique.
Ah oui et détail mais merci pour tes commentaires !

Heitz
 

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 042
Membres
102 765
dernier inscrit
richdi