question sur VBA EXCEL

caroline24

XLDnaute Nouveau
svp je suis debutante en vba excel et j'ai un exercice à faire , si quelqu'un peut m'aider c'est urgent

o Colonne A : Code PRODUIT
o Colonne B : Code VENDEUR
o Colonne C : N° de département géographique (français)
o Colonne A : Le Chiffre d'Affaires CA
La feuille SOUS_TOTAUX est initialement vierge.

• Question n°1
• Le traitement VBA Excel qui est demandé est une recopie des données de la feuille BASE vers la feuille SOUS_TOTAUX (titres de colonnes inclus) mais en ne prenant pas en compte les lignes de CA <=100.

• Question n°2
• Le traitement VBA Excel qui est demandé est l'application de l'assistant de sous-totalisation (Cf menu "Données/Sous-totaux..." sous Microsoft Excel) sur la feuille SOUS_TOTAUX.

La sous-totalisation demandée sommera les CA pour les différents produits (3 sous-totaux car 3 produits différents dans le jeu d'essai).

Pour cette question, le recours à l'enregistrement automatique est accepté mais il faudra toutefois veiller à ce que votre procédure puisse être utilisée sur une plage de données plus importante en nombre de lignes.


• Question n°3
• Le traitement VBA Excel qui est demandé ici est encore l'application de l'assistant de sous-totalisation sur la feuille SOUS_TOTAUX.

La sous-totalisation demandée sommera les CA pour les différents produits (3 sous-totaux car 3 produits différents dans le jeu d'essai) et pour les vendeurs (deuxième niveau de totalisation).

Pour cette question, le recours à l'enregistrement automatique est accepté mais il faudra toutefois veiller à ce que votre procédure puisse être utilisée sur une plage de données plus importante en nombre de lignes.


• Question n°4
• Le traitement VBA Excel demandé est identique à celui de la question n°2. Par contre, le recours à l'enregistrement automatique de la commande de menu "Données/Sous-totaux..." n'est pas autorisé.

Le traitement devra être effectué par une approche "algorithmique", c'est à dire qu'une fois que les données seront triées ( selon la colonne A), il faudra :
o parcourir verticalement les données et s'arrêter dès que l'on change de produit
o insérer une ligne blanche et y intégrer la totalisation (qui aura été préparée préalablement)
o ..

• Question n°5
• Le traitement VBA Excel demandé consiste à exporter le contenu de la feuille BASE sous la forme d'un fichier ASCII délimité par des points virgules. Le fichier généré sera nommé BASE.txt.

La procédure sera nommée QUESTION5.
• Question n°6
• Le traitement VBA Excel demandé assurera les opérations suivantes :
o Appel de la procédure QUESTION1
o Tri des données selon le code produit
o Mise en place de sous-totaux (par l'intermédiaire de l'assistant "Données/Sous-totaux...")
o Compression du plan
o Création d'un histogramme présentant le CA de chaque produit et le CA total
 

Pièces jointes

  • Sous_totaux(3).xls
    19 KB · Affichages: 93

Robert

XLDnaute Barbatruc
Repose en paix
Re : question sur VBA EXCEL

Bonjnour Caroline et bienvenue, bonjour le forum,

En principe je ne réponds pas au personnes qui ne disent même pas bonjour et pour qui c'est urgent... Mais je vais mettre ça sur le fait que c'est ton premier post ici. Je te recommande, puisque tu es nouvelle, de lire la
Lien supprimé qui donne les bons plans pour obtenir de l'aide rapidement même si, à part le bonjour manquant, tu as plutôt bien assuré pour ton premier post...
Je regarde et essaie de trouver un solution au moins pour le premier point car je ne sais pas si je sais faire les autres...
 

Excel-lent

XLDnaute Barbatruc
Re : question sur VBA EXCEL

Bonjour et bienvenu sur le forum Caroline24,


Voici Lien supprimé.

Il s'agit de la charte du forum. L'administrateur explique à l'intérieur quelques règles :
1/ de savoir vivre. Pour résumer :
-> dire bonjour
-> dire merci
-> dire au-revoir

1/ de fonctionnement du forum. Pour résumer :
-> nous sommes pas là pour faire vos devoir d'école à votre place mais pour vous aider/conseiller/donner des astuces

Mais le mieux est de lire la charte en entier (au moins en diagonale ;) ).
--------------------------------------

Pour te mettre le pied à l'étrier

Question n°1
1/ Mettre un filtre automatique sur ton onglet "BASE"

2/ Lance l'enregistreur de macro
-> utilise le filtre automatique de la cellule D1 (onglet "BASE"), pour filtrer toutes les lignes <=100
-> sélectionne les lignes ainsi filtré
-> copie ces lignes
-> colle ces lignes sur l'onglet "SOUS_TOTAUX"

3/ Arrête l'enregistreur de macro

Il te reste ensuite plus qu'à essayer de comprendre la macro, et si besoin nous poser des questions pour t'aider à mieux comprendre tel ou tel ligne ;)

Question n°2
Enregistrer ton fichier avant de commencer cette question.

-> S'entrainer à utiliser l'application "sous-totalisation". Une fois au point, fermer le fichier SANS l'enregistrer.
-> ré-ouvrir ton fichier puis lancer l'enregistreur de macro
-> effectuer les opérations apprissent précédemment
-> arrêter l'enregistreur de macro

Comme pour la question précédent, regarder le code, essayer de le comprendre, et si besoin poser des questions ici (sans oublier de mettre ton fichier nouvellement modifié).

Et là nous pourrons t'apprendre à adapter la macro pour qu'elle puisse gérer "une plage de données plus importante en nombre de lignes".

A te lire

Cordialement

PS. 1 : bonsoir Robert, je t'avais pas vu!
PS. 2 : tu verras Caroline24, l'enregistreur de macro deviendra très rapidement ton meilleur ami. C'est très pratique et rend de grands services.
 
Dernière édition:

caroline24

XLDnaute Nouveau
Re : question sur VBA EXCEL

Bonjour Robert et merci pour ta remarque ,

Je m'excuse mais je suis juste confuse avec le temps qui presse , j'ai essayé de lire le cours detaillé pour debutant mais je bloque , si vous pouvez m'aider ce serai sympa.
 

caroline24

XLDnaute Nouveau
Re : question sur VBA EXCEL

Bonjour Robert et merci pour ta remarque ,

Je m'excuse mais je suis juste confuse avec le temps qui presse , j'ai essayé de lire le cours detaillé pour debutant mais je bloque , si vous pouvez m'aider ce serai sympa.
 

Excel-lent

XLDnaute Barbatruc
Re : question sur VBA EXCEL

Bonsoir Caroline24,


Ne t'inquiète pas pour le temps! Tes questions sont assez simple et tu auras largement fini pour lundi matin ;)
Tu verras, tu as frappé à la bonne porte, il y a ici beaucoup de personnes à même de pouvoir te répondre et t'aider rapidement, et cela même si tu ne mets pas le mot "urgent" ;)

Essaye de suivre étape par étape les conseils ci-dessus, tu vas voir, tu vas y arriver et en plus :
-> tu l'auras fait toute seule (ou presque)
-> cela sera beaucoup plus formateur.

Bon courage
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : question sur VBA EXCEL

Bonjour Caroline, Excel-lent, bonjour le forum,

Je vais me faire engueuler par Excel-lent mais comme il a raison je ferai tête basse...
Une proposition pour le premier problème (qui reprend son idée d'ailleurs) :
Code:
Sub Macro1()
Dim ob As Object 'décalre la variable ob (Onglet Base)
Dim os As Object 'décalre la variable os (Onglet Sous_totaux
Dim dl As Long 'décalre la variable dl (Dernière Ligne)
Dim pl As Range 'décalre la variable pl (PLage)

Application.ScreenUpdating = False 'masque les changements à l'écran
Set ob = Sheets("BASE") 'définit l'onglet ob
Set os = Sheets("SOUS_TOTAUX") 'définit l'onglet os
os.Cells.Clear 'efface les éventuelles anciennes données de l'onglet Sous_totaux
dl = ob.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne édité dl de la ceolonne 1 (=A) de l'onglet base
Set pl = ob.Range("A1:D" & dl) 'définit la plage pl
ob.Range("A1").AutoFilter 'Filtre automatique activé en A1 de l'onglet base
ob.Range("A1").AutoFilter field:=4, Criteria1:="<=100" 'fitre selon le critère CA<=100
pl.SpecialCells(xlCellTypeVisible).Copy os.Range("A1") 'copy les lignes visible de la plage pl dans A1 de l'onglet os
ob.Range("A1").AutoFilter 'Filtre automatique déactivé en A1 de l'onglet base
os.Activate 'active l'onglet sous_totaux (facultatif, à toi de voir)
Application.ScreenUpdating = False 'masque les changements à l'écran
End Sub
 

caroline24

XLDnaute Nouveau
Re : question sur VBA EXCEL

bonjour Robert, Exel-lent ,
je crois qu'on doit faire la meme methode mais en filtrant les lignes ssperieres strictement à 100 pour que ça donne le meme tableau mais privés des deux lignes ,
qu'est ce que vous en pensez?
cordialement
 

Excel-lent

XLDnaute Barbatruc
Re : question sur VBA EXCEL

Hello Robert,

En effet, je suis pas content du tout :D

LOL

Sans parler qu'elle te dit être débutante en VBA et dès la première macro, tu lui met pleins de trucs complexe et dont on peut se passer pour son devoir! Comme par exemple :
-> Application.ScreenUpdating = False
-> "Set"
-> variable "object"
-> ...

Mieux vaut commencer simple, puis compliquer au fur et à mesure ;)

Du moins c'est mon avis.

Je te taquine mais "chapeau bas pour ta macro" ;)

Au plaisir

Salut Caroline24,

caroline24 à dit:
on doit faire la meme methode
Laquelle? Car celle de Robert est également bonne ;)

caroline24 à dit:
mais en filtrant les lignes ssperieres strictement à 100

Dans ton exercice ce n'est pas écrit "supérieur" mais "inférieur" ;)
Ce n'est pas écrit "strictement" mais "inférieur ou égale" ;)

Ah, j'y suis, en faite tu penses que lorsqu'on filtre les lignes "strictement supérieur", Excel masque les lignes "strictement supérieur" et n'affiche que les lignes "inférieur ou égale"?

Non, non, ce n'est pas ça. Si tu filtre les lignes "strictement supérieur", Excel affiche les lignes "strictement supérieur" et masque toutes les autres.

Donc dans ton cas il faut bien demander les lignes "inférieur ou égale à 100".

A te lire
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : question sur VBA EXCEL

Bonsoir à tous

Histoire de pas laisser Robert tout seul face à "l'enguirlandage" amical, et parce que l'apéritif fut trop long et que je ne retrouve plus ma télécommande et qu'il faut bien passer le temps, j'ai été direct attaquer la question 5
VB:
Sub Question5()
Dim TempArr() As Variant, Txt, x, y
Const FileName As String = "C:\TEMP\BASE.txt"
Sheets("BASE").Copy
FileNo = FreeFile
Open FileName For Output As #FileNo
    With ActiveWorkbook
    With .Sheets(1).Range("A1").CurrentRegion
        ReDim Preserve TempArr(1 To .Columns.Count)
        For x = 1 To .Rows.Count
            For y = 1 To .Columns.Count
                TempArr(y) = .Cells(x, y).Value
            Next y
            Txt = Join(TempArr, ";")
            Print #FileNo, Txt
        Next x
    End With
    .Close False
    End With
Close #FileNo
End Sub ' adapté d'un code d'Andrew Poulsom
J'ai pas mis de commentaires volontairement (en espérant des questions futures de la demanderesse)

PS: J'ai essayé de biaiser avec l'enregistreur de macros mais au final c'est lui qui m'a b..sé.
Il s'obstine à remplacer les point-virgules par des virgules, le salopiaud !
Code:
Sub MacroDuSalopiaud()
'ici on n'essaye pas de biaiser
Dim CSVNOM$, TXTNOM$
Sheets("BASE").Copy
ActiveWorkbook.SaveAs FileName:="C:\temp\BASE.csv", FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close True
CSVNOM = "C:\temp\BASE.csv"
TXTNOM = "C:\temp\BASE.txt"
Name CSVNOM As TXTNOM
End Sub
Code:
Sub LeSalopiaudFuckedMyVBA()
'ici on biaise mais c'est lui qui m'a ...
Sheets("BASE").Copy
ActiveWorkbook.SaveAs FileName:="C:\temp\BASE.txt", FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close True
End Sub
EDITION: Tout pareil d'accord à propos des formules de politesse et de la charte du forum, mais comme il parait que j'en cause trop de ces points, je me suis abstenu ou presque ;)
 
Dernière édition:

caroline24

XLDnaute Nouveau
Re : question sur VBA EXCEL

bonsoir Staple 1600 ,bonsoir forum,
merci pour votre aide pour la question 5 ça a marché , et je l'ai bien comprise
mais juste je bloque au niveau de la question 3 j'ai déjà trier la colonne Produits de A à Z pour faire la sous totalisation P1 P2 et P3 .
Mais là on demande une autre sous totalisation (de deuxième niveau) sur la même feuille par rapport à la colonne vendeurs V1 V2 V3 .
Merci
 

caroline24

XLDnaute Nouveau
Re : question sur VBA EXCEL

si si je le suis toujours devant vous ^^" , la vérité c'est que j'ai lu un cours VBA pour m’initier a la syntaxe , c'est pourquoi j'ai pu comprendre ce que vous avez programmé .
Mais j'ai toujours un problème au niveau de la question 3
et aussi pour la quatrième , est ce que je dois juste utilisé le code de la 2eme question puisque c'est la même chose.
MERCI
 

Discussions similaires

Réponses
9
Affichages
118
Réponses
2
Affichages
99

Statistiques des forums

Discussions
311 735
Messages
2 082 024
Membres
101 873
dernier inscrit
excellllll