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
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
A voir également:
- Partir d'une feuille de Calcul Excel pour un VBA
- Liste déroulante excel - Guide
- Calcul moyenne excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Formule de calcul excel - Guide
- Déplacer une colonne excel - Guide
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
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...
Tout (ou presque) est possible avec VBA.
Cependant, dans ton cas, un classeur serait le bienvenu accompagné d'explications...
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
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 :
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.
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.
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
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 :
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
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.
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.
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
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é ...
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é ...
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
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 :
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...
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...
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
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.
<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.
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
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?
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?
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
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.
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.
13 févr. 2015 à 09:01
13 févr. 2015 à 11:24
Pour mettre un classeur dans ce forum, il convient d'utiliser cjoint.
13 févr. 2015 à 11:52
j'ai pu joindre le fichier...
https://www.cjoint.com/?3Bnl7cdlPjn
13 févr. 2015 à 11:53
Bon week end
16 févr. 2015 à 08:34
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...