Partir d'une feuille de Calcul Excel pour un VBA

Fermé
vanekoue - 12 févr. 2015 à 11:47
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 19 févr. 2015 à 14:39
Bonjour,
J'ai une feuille de calcul excel qui commence a devenir non ergo et très grande (des calculs dans des cellules et je fais des copies de résultat et je colle dans d'autres feuilles excel pour produire des rapport)...
Cette manipulation expose a des erreurs et rend le travail très fastidieux
je me demandais s'il serait possible de la passer sous VBA pour faire les calculs et générer des rapports.
PS: c'est ma première expérience avec VBA

A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
12 févr. 2015 à 13:01
Bonjour,

Tout (ou presque) est possible avec VBA.
Cependant, dans ton cas, un classeur serait le bienvenu accompagné d'explications...
0
vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
13 févr. 2015 à 09:01
Oh c'est une bonne nouvelle ça!!!.. je vourdrais bien télécharger un extrait de mon fichier mais je sais pas comment faire... je ne vois pas un onglet télécharger dans le coin messagerie
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
13 févr. 2015 à 11:24
Bonjour,
<== Si si c'est important chaque matin...


Pour mettre un classeur dans ce forum, il convient d'utiliser cjoint.
0
vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
13 févr. 2015 à 11:52
Ah désole ... Bonjour et merci pour tes réponses...
j'ai pu joindre le fichier...
https://www.cjoint.com/?3Bnl7cdlPjn
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
13 févr. 2015 à 11:53
Pour cause de week end anticipé, je regarde ça lundi.
Bon week end
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
16 févr. 2015 à 08:34
Bonjour,

Le fichier joint est un extrait de la feuille de calcul. les cases bleues sont celle ou les données (chiffres) sont rentrées par l'utilisateur.
Les cases bleues sont elles les mêmes dans le fichier complet?
J'entends par là, ont exactement la même adresse. Exemple : B9:E9, N9:Q9, V9:Y9, F13:AE13, F29:AE29, etc...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 févr. 2015 à 08:06
Salut,

J'ai revu la façon de construire l'UserForm, et ce afin de faciliter la suite. Plutôt que d'ajouter des TextBox par le code comme précédemment, je les ai tous ajoutés "en dur", dans l'userform. Tu pourras voir ça. Le code de l'événement initialize a donc changé, pour ne plus créer ces testbox, mais pour les placer.
L'UserForm a désormais cette structure :

<Page1>(Month)
<Frame1>(Reçu) => alimentera la ligne 9
12 TextBox, de TextBox1 à TextBox12 placés comme ceci :
<label1>(B:E)</label1> : TextBox 1, 2, 3 & 4
<label2>(N:Q)</label2> : TextBox 5, 6, 7 & 8
<label3>(C:Y)</label3> : TextBox 9, 10, 11 & 12
</Frame1>
<Frame2>(Consommation) => alimentera la ligne 10
2 TextBox : TextBox13 & 14
</Frame2>
<Frame3>(Gains/pertes) => alimentera la ligne 11
2 TextBox : TextBox15 & 16
</Frame3>
<Frame4>(Retrait) => alimentera la ligne 13
30 TextBox : de TextBox17 à 46
</Frame4>
<Frame5>(Mémo Stock) => alimentera la ligne 15
2 TextBox : TextBox47 & 48
</Frame5>
</Page1>

<Page2>(Month+1)
<Frame6>(Reçu) => alimentera la ligne 25
12 TextBox, de TextBox49 à TextBox60 placés comme ceci :
<label4>(B:E)</label1> : TextBox 49, 50, 51 & 52
<label5>(N:Q)</label2> : TextBox 53, 54, 55 & 56
<label6>(C:Y)</label3> : TextBox 57, 58, 59 & 60
</Frame6>
<Frame7>(Consommation) => alimentera la ligne 26
2 TextBox : TextBox61 & 62
</Frame7>
<Frame8>(Gains/pertes) => alimentera la ligne 27
2 TextBox : TextBox63 & 64
</Frame8>
<Frame9>(Changement d'inventaire) => alimentera la ligne 28
28 TextBox : de TextBox65 à 92
</Frame9>
<Frame10>(Retrait) => alimentera la ligne 29
30 TextBox : de TextBox93 à 122
</Frame10>
<Frame11>(Mémo Stock) => alimentera la ligne 31
2 TextBox : TextBox123 & 124
</Frame11>
</Page2>

Nota : Tout ceci n'est pas du code et n'a rien à voir avec VBA. Je t'ai fait cette structure pour une meilleure appréhension et compréhension.

Le Fichier de travail.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 févr. 2015 à 08:19
Pour continuer, nous allons :
1- définir les propriétés de chacun des TextBox
Pour cela, tu m'as dit que chaque TextBox est numérique. Mais comportent-ils d'autres caractéristiques? Genre longueur maxi de 3 chiffres, ou dates ou autres...

2- Créer une fonction de vérification de la saisie dans ces textbox.
Cette fonction va faire toutes les vérifications utiles et nécessaires afin d'empêcher les erreurs de saisie. Dis moi exactement ce que doivent saisir les utilisateurs?

Pour faire cela (la vérification), nous aurons besoin d'une Fonction, que nous allons déclarer comme ceci :

Public Function Verif_Saisie_Tx(Ctrl As Control) As Boolean

End Function


explications :
Public : cette fonction va nous servir dans, au moins, un autre Module de ce projet. Pour qu'elle y soit accessible, il faut la déclarer en Public et non pas en Private comme la
Private Sub UserForm_initialize()
par exemple.
Function : et non pas Sub. Pourquoi? Tout simplement parce qu'on va lui demander de retourner un résultat (Une Sub agit et ne retourne pas de résultat). En l'occurrence, si la saisie est bonne, la fonction retournera True.
Verif_Saisie_Tx : Est le nom de notre fonction. On s'en servira pour l'appeler.
Ctrl As Control : est le paramètre que nous allons passer à notre fonction. On sait que l'on veut vérifier la saisie dans un (des) contrôle(s), donc nous allons "envoyer" à la fonction le contrôle à vérifier.
As Boolean : Ici, nous souhaitons que notre fonction nous renvoie Vrai ou Faux selon nos vérifications. Donc => Type Boolean.


0
vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 09:01
Bonjour Franck,
Désolé pour mon silence d'hier. J'arrive pas pour le moment a voir la différence (fonctionnelle) entre placer et créer les textbox.
Pour les données:
-Les nombres pour l'instant sont de l'ordre du million (9 chiffres maxi);
-Les dates sous le format mois-année. cette information est rentrée au début de chaque cycle de calcul dans tout la feuille excel pour la génération des rapports individuel de A, B et C.

Merci pour votre disponibilité ...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 09:16
Bonjour,
Désolé pour mon silence d'hier.
Pas de souci. On va à ton rythme.
J'arrive pas pour le moment a voir la différence (fonctionnelle) entre placer et créer les textbox.
Il n'y a aucune différence au final. La seule différence c'est que, dans mon premier jet, j'ai été un peu trop fainéant pour placer les quelques 120 textbox nécessaires à la saisie. Au final, les codes seront simplifiés par le fait que tous les textbox sont placés dans l'userform...
Pour les données:
Ce dont j'ai besoin maintenant c'est de savoir quoi saisir et ou. Je m'explique. Tu as la structure ci-dessus. En regard de chaque TextBox, indique moi ce qui doit être saisi dedans, et ajoute moi une légende.
Exemple :
<Page1>(Month)
<Frame1>(Reçu) => alimentera la ligne 9
12 TextBox, de TextBox1 à TextBox12 placés comme ceci :
<label1>(B:E)</label1> : TextBox 1, 2, 3 & 4 => Grands Nombres
<label2>(N:Q)</label2> : TextBox 5, 6, 7 & 8 => petits Nombres
<label3>(C:Y)</label3> : TextBox 9, 10, 11 & 12 => Dates format "mm-yyyy"
</Frame1>
<Frame2>(Consommation) => alimentera la ligne 10
2 TextBox : TextBox13 & 14
</Frame2>
<Frame3>(Gains/pertes) => alimentera la ligne 11
2 TextBox : TextBox15 & 16
</Frame3>
<Frame4>(Retrait) => alimentera la ligne 13
30 TextBox : de TextBox17 à 46
</Frame4>
<Frame5>(Mémo Stock) => alimentera la ligne 15
2 TextBox : TextBox47 & 48
</Frame5>
</Page1>

<Page2>(Month+1)
<Frame6>(Reçu) => alimentera la ligne 25
12 TextBox, de TextBox49 à TextBox60 placés comme ceci :
<label4>(B:E)</label1> : TextBox 49, 50, 51 & 52
<label5>(N:Q)</label2> : TextBox 53, 54, 55 & 56
<label6>(C:Y)</label3> : TextBox 57, 58, 59 & 60
</Frame6>
<Frame7>(Consommation) => alimentera la ligne 26
2 TextBox : TextBox61 & 62
</Frame7>
<Frame8>(Gains/pertes) => alimentera la ligne 27
2 TextBox : TextBox63 & 64
</Frame8>
<Frame9>(Changement d'inventaire) => alimentera la ligne 28
28 TextBox : de TextBox65 à 92
</Frame9>
<Frame10>(Retrait) => alimentera la ligne 29
30 TextBox : de TextBox93 à 122
</Frame10>
<Frame11>(Mémo Stock) => alimentera la ligne 31
2 TextBox : TextBox123 & 124
</Frame11>
</Page2>

Légende :
Grands nombres = Nbres > 1000000
Petits nombres = Nombres < 32000
Dates format mm-yyyy = par exemple : 02-2015 pour février 2015 le tiret devant être inscrit...
Etc...
0
vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
19 févr. 2015 à 09:35
Ah d'accord
<Page1>(Month): =>mm-yy
<Frame1>(Reçu) => alimentera la ligne 9
12 TextBox, de TextBox1 à TextBox12 placés comme ceci :
<label1>(B:E)</label1> : TextBox 1, 2, 3 & 4=>grand nombres
<label2>(N:Q)</label2> : TextBox 5, 6, 7 & 8=>grand nombres
<label3>(C:Y)</label3> : TextBox 9, 10, 11 & 12 =>grand nombres
</Frame1>
<Frame2>(Consommation) => alimentera la ligne 10
2 TextBox : TextBox13 & 14 =>grand nombres
</Frame2>
<Frame3>(Gains/pertes) => alimentera la ligne 11
2 TextBox : TextBox15 & 16 =>petit nombres
</Frame3>
<Frame4>(Retrait) => alimentera la ligne 13
30 TextBox : de TextBox17 à 46 =>grand nombres
</Frame4>
<Frame5>(Mémo Stock) => alimentera la ligne 15
2 TextBox : TextBox47 & 48 =>grand nombres
</Frame5>
</Page1>
et ainsi de suite pour le prochain cycle.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 09:43
Plusieurs choses alors.
Dans ta feuille, je ne vois aucune date. Faudra t'il, à terme, remplacer Month par sa valeur contenue dans l'userform?

qu'appelles tu petit nombres? Toujours inférieurs à 32000? Toujours inférieurs à 255?

Peut-il y avoir :
- des nombres décimaux? si oui => ou?
- des nombres négatifs? si oui => ou?
0
vanekoue Messages postés 15 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 10:08
Oui pour la date c'est effectivement ça. Le month dans la feuille en fait représente le mois du cycle de calcul.
Petit nombre pour moi c'est cinq chiffre mais il est dynamique ( donc peut changer)... quel est impact de le déclarer comme grand chiffre?
Pour les décimaux les cellules suivantes sont concerne es : A1; G2; I1,2; K1,2; M1,2; P2; R2; T2; X1; Z1,2; AB1,2; AD1,2; B19 (le taux).
Les champs suivant peuvent être des entiers négatifs (grand nombre)
-Début
-Gains/pertes
-Consommation
-Changement d'inventaire
-Fin
Je tiens a préciser que j'ai le Month M mis sur la feuille de calcul était juste pour montrer que le début du Month M+1 est égal a la fin du Month M.
Et pour le reste ce sont les mêmes calculs chaque mois.. sauf quelques spécificités que je pourrais modifier des que j'aurais la main sur VBA car pas facile a expliquer.
0