[excel] formulation d'une variable
Résolu/Fermé
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
-
3 mars 2008 à 09:29
MattDF Messages postés 76 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 5 août 2009 - 6 mars 2008 à 08:51
MattDF Messages postés 76 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 5 août 2009 - 6 mars 2008 à 08:51
A voir également:
- [excel] formulation d'une variable
- Liste déroulante excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Formule excel si et - Guide
- Formule excel moyenne - Guide
- Déplacer une colonne excel - Guide
52 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
4 mars 2008 à 17:05
4 mars 2008 à 17:05
tout compte fais c'est plus simple par là ... il faut remplacer comptePeriodeMoisDemi par
maintenant ça devrait le faire ... enfin j'espère.
;o)
polux
Public Sub comptePeriodeMoisDemi(ByVal j As Double, ByVal A As String, ByVal B As String, ByVal C As String, ByVal D As String) Dim total As Integer Sheets(1).Select total = 0 Range(A & Range(A & "65536").End(xlUp).Row + 1).Select Range(B, ActiveCell.Offset(-3, 0)).Select For Each Cell In Selection If Cell.Value = j - 0.5 And Cell.Offset(0, 1).Value = 2 And IsEmpty(Cell.Offset(0, 3)) And IsEmpty(Cell.Offset(0, 4)) Then total = total + 1 End If Next Range(C & Range(C & "65536").End(xlUp).Row + 1).Select Range(D, ActiveCell.Offset(-1, 0)).Select For Each Cell In Selection If Cell.Value = j - 0.5 And Cell.Offset(0, 1).Value = 2 Then total = total + 1 End If Next tabtotalmd(CInt(j - 0.5)) = total 'stockage dans le tabTotalmd à l'index j - 0.5 (l'index est un entier) -- Cint transforme la valeur en entier If total > 0 Then totalt = totalt + 1 totalts = totalts + 1 End If End Sub
maintenant ça devrait le faire ... enfin j'espère.
;o)
polux
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 09:50
3 mars 2008 à 09:50
bonjour,
Il suffit de mettre un paramètre en entrée dans la macro.
Sub Macro1(byval i As Integer)
...
Ensuite tu remplaces dans la macro toutes les valeurs en gras (ici 1) par i. Il va quand même falloir que tu appelles 25 fois cette procédure (macro).
Tu peux le faire dans une boucle :
J'espère que ça t'éclaire un peu ...
Bon courage
;o)
Polux
Il suffit de mettre un paramètre en entrée dans la macro.
Sub Macro1(byval i As Integer)
...
Ensuite tu remplaces dans la macro toutes les valeurs en gras (ici 1) par i. Il va quand même falloir que tu appelles 25 fois cette procédure (macro).
Tu peux le faire dans une boucle :
Dim i As Integer For i = 1 to 25 Call Macro1(i) Next i
J'espère que ça t'éclaire un peu ...
Bon courage
;o)
Polux
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 11:07
3 mars 2008 à 11:07
Un petit peu mais pas beaucoup : je me doute que placer i devant cell.value peut me permettre de ne pas mettre de chiffre, mais quid de total1m si je veux remplacer 1 par i ? sinon la simplification ne sera que symbolique dans la mesure où je serais obligé de reprendre cette petite macro pour chacun des 25 chiffres. je serais obligé de faire un truc genre
Ca ne me fera pas vraiment gagner de la place (sans compter qu'après il faut que je m'occupe de faire la même chose aux mois et demi, soit une opération renouvelée 50 fois.... imagine la taille de la macro !)
De même, n'y a t'il pas moyen d'exécuter ce bout de macro 25 fois sans passer par une autre macro ?
Pour finir, quelle est la propriété de "integer" ?
For i = 1 .... For i = 2 ... For i = 3 ...
Ca ne me fera pas vraiment gagner de la place (sans compter qu'après il faut que je m'occupe de faire la même chose aux mois et demi, soit une opération renouvelée 50 fois.... imagine la taille de la macro !)
De même, n'y a t'il pas moyen d'exécuter ce bout de macro 25 fois sans passer par une autre macro ?
Pour finir, quelle est la propriété de "integer" ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 12:49
3 mars 2008 à 12:49
bon, c'est pas gagné ... lol ... je plaisante ...
Alors Integer est simplement le type de variable et indique que la variable stockée est un entier;
Petit rappel sur les types de variable le plus souvent utilisée en VB :
Integer : stockage de nombre entier
Double : stockage de nombre décimaux
Long : stockage de nombre dans une plage de -2 147 483 648 à 2 147 483 647
String : stockage de chaîne de caractères
Ensuite, une boucle For ... Next, évite de répéter x fois la même opération. Dans le cas présent, avec trois lignes de code on va effectuer 25 fois la même opération. la première fois avec i = 1, la deuxième fois avec i = 2 etc jusqu'à que i atteigne la valeur de 25. Quand i aura la valeur de 25, on sort de la boucle.
En ce qui concerne total1m ... il semble que cette variable sert uniquement de compteur ... quel est l'importance du 1 dans cette variable ? je n'en vois pas dans le code présent ... visiblement elle sert à vérifier que certaines cellules contiennent une information et si c'est le cas alors Totalt = Totalt + 1
On peut effectivement placer la boucle For ... Next dans la macro. dans ce cas il faut faire :
voilà ... n'hésites pas à demander plus d'explication si je n'ai pas été assez clair
;o)
polux
Alors Integer est simplement le type de variable et indique que la variable stockée est un entier;
Petit rappel sur les types de variable le plus souvent utilisée en VB :
Integer : stockage de nombre entier
Double : stockage de nombre décimaux
Long : stockage de nombre dans une plage de -2 147 483 648 à 2 147 483 647
String : stockage de chaîne de caractères
Ensuite, une boucle For ... Next, évite de répéter x fois la même opération. Dans le cas présent, avec trois lignes de code on va effectuer 25 fois la même opération. la première fois avec i = 1, la deuxième fois avec i = 2 etc jusqu'à que i atteigne la valeur de 25. Quand i aura la valeur de 25, on sort de la boucle.
En ce qui concerne total1m ... il semble que cette variable sert uniquement de compteur ... quel est l'importance du 1 dans cette variable ? je n'en vois pas dans le code présent ... visiblement elle sert à vérifier que certaines cellules contiennent une information et si c'est le cas alors Totalt = Totalt + 1
On peut effectivement placer la boucle For ... Next dans la macro. dans ce cas il faut faire :
Sub Macro() Dim i As Interger For i = 0 to 25 'La c'est pour comptabiliser les périodes de 1 mois Range("Q" & Range("Q65536").End(xlUp).Row + 1).Select Range("Q2", ActiveCell.Offset(-3, 0)).Select For Each Cell In Selection If Cell.Value = i And IsEmpty(Cell.Offset(0, 1)) And IsEmpty(Cell.Offset(0, 3)) And IsEmpty(Cell.Offset(0, 4)) Then total1m = total1m + 1 End If Next Range("T" & Range("T65536").End(xlUp).Row + 1).Select Range("T2", ActiveCell.Offset(-1, 0)).Select For Each Cell In Selection If Cell.Value = i And IsEmpty(Cell.Offset(0, 1)) Then total1m = total1m + 1 End If Next If total1m > 0 Then Totalt = Totalt + 1 End If Next i
voilà ... n'hésites pas à demander plus d'explication si je n'ai pas été assez clair
;o)
polux
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 14:09
3 mars 2008 à 14:09
D'abord, merci de prendre du temps pour te pencher sur mon problème, c'est très aimable. :-)
merci également pour les éclaircissements sur les variables. Comme je le disais, j'ai des lacunes en la matière et j'ai donc besoin de savoir vers quoi je vais afin de ne plus solliciter les gens pour résoudre X fois le même problème. :-)
Donc il semblerait que je doive un peu plus expliquer les besoins de la macro. Effectivement, comme tu l'as deviné, la variable total1m a une importance. Je lui ai donné ce nom car elle totalise le nombre de fois ou elle trouve le chiffre 1 dans les cases concernées, chiffres qui correspondent à des durées en mois...d'où le m à la fin (en l'occurrence : total1m pour des durées d'1 mois, total2m pour 2 mois, etc...). Ces totaux seront ensuite repris pour être affichés un peu plus tard, toujours par la macro.
Totalt sert à comptabiliser le nombre de lignes qui devront être affichées. En effet, si par exemple Excel ne trouve pas une seule case avec le chiffre 4 (pour des durées de 4 mois), je ne veux pas qu'il m'affiche une ligne pour me dire qu'il y a 0 personnes pour la durée de 4 mois, c'est pas intéressant et ca alourdit la feuille que je dois envoyer au client.
Pour l'instant, la macro ne pourrait pas convenir en changeant juste les chiffres recherchés par des i car elle comptabiliserait toutes les durées de 1 à 25 mois pour des durées d'1 mois (total1m) lorsque l'affichage des lignes aura lieu. En effet, plus tard sur la macro, je demande ceci :
et ca je le demande aussi 25 fois (plus 25 autre fois pour les durées de mois et demi, donc 50 fois au total), pour toutes les durées calculées... Excel rend son tablier car la macro est trop longue... d'où mon besoin de raccourcir la macro.
merci également pour les éclaircissements sur les variables. Comme je le disais, j'ai des lacunes en la matière et j'ai donc besoin de savoir vers quoi je vais afin de ne plus solliciter les gens pour résoudre X fois le même problème. :-)
Donc il semblerait que je doive un peu plus expliquer les besoins de la macro. Effectivement, comme tu l'as deviné, la variable total1m a une importance. Je lui ai donné ce nom car elle totalise le nombre de fois ou elle trouve le chiffre 1 dans les cases concernées, chiffres qui correspondent à des durées en mois...d'où le m à la fin (en l'occurrence : total1m pour des durées d'1 mois, total2m pour 2 mois, etc...). Ces totaux seront ensuite repris pour être affichés un peu plus tard, toujours par la macro.
Totalt sert à comptabiliser le nombre de lignes qui devront être affichées. En effet, si par exemple Excel ne trouve pas une seule case avec le chiffre 4 (pour des durées de 4 mois), je ne veux pas qu'il m'affiche une ligne pour me dire qu'il y a 0 personnes pour la durée de 4 mois, c'est pas intéressant et ca alourdit la feuille que je dois envoyer au client.
Pour l'instant, la macro ne pourrait pas convenir en changeant juste les chiffres recherchés par des i car elle comptabiliserait toutes les durées de 1 à 25 mois pour des durées d'1 mois (total1m) lorsque l'affichage des lignes aura lieu. En effet, plus tard sur la macro, je demande ceci :
'affichage éventuel pour une durée de 1 mois If total1m > 0 Then ActiveCell.Value = total1m 'le fameux résultat comptabilisant toutes les durées d'un mois ActiveCell.Offset(0, 2).Select ActiveCell.Value = 1 'pour 1 mois ActiveCell.Offset(0, 1).Select ActiveCell.Value = "month" 'au singulier car il n'y a qu'un mois, ce sera au pluriel quand on passera à des durées supérieures ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=Tarif" '"Tarif" est le nom donné à une case qui contient le... tarif Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False 'et ca c'est pour avoir le chiffre dans la case et non la formule. ActiveCell.Offset(1, -4).Select 'pour sélectionner la prochaine case active pour la durée suivante End If
et ca je le demande aussi 25 fois (plus 25 autre fois pour les durées de mois et demi, donc 50 fois au total), pour toutes les durées calculées... Excel rend son tablier car la macro est trop longue... d'où mon besoin de raccourcir la macro.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 14:41
3 mars 2008 à 14:41
ok je comprends mieux ...
Je pense qu'il faut simplier ... en principe une macro est utile pour automatiser une tâche.
Ici, une seule macro effectue plusieurs taches ... :-( ...
Il faut donc faire plusieurs macros :-) ... ça va rendre les choses plus claires ...
Rien n'empêche de le faire, une macro pouvant faire appel à une autre macro et ainsi de suite ...
Je vois déjà 2 macros bien distinctes :
'La c'est pour comptabiliser les périodes de 1 mois
'affichage éventuel pour une durée de 1 mois
Il en faut une 3 ème pour piloter le tout. On voit aussi qu'il y a une variable commune : la durée (périodes),
c'est une variable qu'il faut passer en paramètre aux macros ...
C'est difficile d'expliquer ça sur le forum. Si tu veux passe ton fichier ici https://www.cjoint.com/ et colle le lien dans ton prochain post. Supprimes les infos confidentielles ou fais un copier/coller de la macro dans le bloc-notes et mets le fichier sur ci-joint.com.
;o)
polux
Je pense qu'il faut simplier ... en principe une macro est utile pour automatiser une tâche.
Ici, une seule macro effectue plusieurs taches ... :-( ...
Il faut donc faire plusieurs macros :-) ... ça va rendre les choses plus claires ...
Rien n'empêche de le faire, une macro pouvant faire appel à une autre macro et ainsi de suite ...
Je vois déjà 2 macros bien distinctes :
'La c'est pour comptabiliser les périodes de 1 mois
'affichage éventuel pour une durée de 1 mois
Il en faut une 3 ème pour piloter le tout. On voit aussi qu'il y a une variable commune : la durée (périodes),
c'est une variable qu'il faut passer en paramètre aux macros ...
C'est difficile d'expliquer ça sur le forum. Si tu veux passe ton fichier ici https://www.cjoint.com/ et colle le lien dans ton prochain post. Supprimes les infos confidentielles ou fais un copier/coller de la macro dans le bloc-notes et mets le fichier sur ci-joint.com.
;o)
polux
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 15:32
3 mars 2008 à 15:32
Voilà le fichier, compressé pour prendre moins de place. Tout est expliqué dans le fichier "explication", n'hésite pas à me demander des précisions si besoin est.
https://www.cjoint.com/?ddpF2ahCNU
Merci pour ton coup de main ! ;-)
https://www.cjoint.com/?ddpF2ahCNU
Merci pour ton coup de main ! ;-)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 15:42
3 mars 2008 à 15:42
merci je jete un oeil et je te fais signe
;o)
polux
;o)
polux
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 16:11
3 mars 2008 à 16:11
Je suis impatient d'avoir ton avis sur la question ! ^^
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 16:11
3 mars 2008 à 16:11
un question ?
le code s'effectue bloc par bloc ... donc les variables totalt et totalts sont cumulés de bloc en bloc ??? c'est à dire que lorsque l'on est dans le bloc du 25ème mois, dans totalt et totalts il y a le cumul depuis le bloc de la 1ère semaine..
Ai-je bien tout compris ?
le code s'effectue bloc par bloc ... donc les variables totalt et totalts sont cumulés de bloc en bloc ??? c'est à dire que lorsque l'on est dans le bloc du 25ème mois, dans totalt et totalts il y a le cumul depuis le bloc de la 1ère semaine..
Ai-je bien tout compris ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 16:13
3 mars 2008 à 16:13
pour l'instant j'essaie de voir comment optimiser l'étape 1 ...
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 16:29
3 mars 2008 à 16:29
heuuu une autre question ???
dans la colonne Q et T j'ai des valeurs sous format texte ? est-ce normal ?
dans la colonne Q et T j'ai des valeurs sous format texte ? est-ce normal ?
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 16:34
3 mars 2008 à 16:34
Tout à fait, quand on reçoit le fichier, il arrive comme ça. C'est une des choses qu'il faut justement changer quand on le reçoit, et maintenant je le fais via la macro.
Pour Totalt et Totalts, tu as vu juste. Encore que j'avais prévu Totalts pour une chose et que finalement j'ai réussi à faire sans.... il est destiné à disparaître.
Pour Totalt et Totalts, tu as vu juste. Encore que j'avais prévu Totalts pour une chose et que finalement j'ai réussi à faire sans.... il est destiné à disparaître.
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 16:41
3 mars 2008 à 16:41
D'ici 10 minutes je vais devoir te laisser (je quitte le boulot)... mais on pourra reprendre demain si tu es dispo.
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 17:02
3 mars 2008 à 17:02
Pour info, tu peux t'étonner du fait que je demande à Excel d'effacer des cases vides. C'est qu'elles ne le sont pas vraiment, et elles viennent fausser mon calcul des cases grises dans la première feuille.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 17:10
3 mars 2008 à 17:10
oui j'ai pigé pour le formatage des cellules par le code ... je suis surpris que tu n'es pas prévu un bouton pour lancer la macro ... lol
;o)
;o)
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
3 mars 2008 à 19:05
3 mars 2008 à 19:05
Ca sera pour la fin, quand tout le reste sera fonctionnel ! ;-)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
4 mars 2008 à 08:53
4 mars 2008 à 08:53
bonjour,
J'ai un peu bidouillé ton zinzin ... tu vas vite comprendre comment ça fonctionne, c'est assez simple.
voilà le lien pour le récup: https://www.cjoint.com/?deiWg2H5AZ
A toi de continuer à optimiser le reste du code ... tu peux faire la même chose pour la 2ème macro.
N'hesite pas à me demander des précisions ou explications.
bon courage
;o)
Polux
J'ai un peu bidouillé ton zinzin ... tu vas vite comprendre comment ça fonctionne, c'est assez simple.
voilà le lien pour le récup: https://www.cjoint.com/?deiWg2H5AZ
A toi de continuer à optimiser le reste du code ... tu peux faire la même chose pour la 2ème macro.
N'hesite pas à me demander des précisions ou explications.
bon courage
;o)
Polux
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
4 mars 2008 à 09:29
4 mars 2008 à 09:29
Merci ! Je vais jeter un œil là dessus sans tarder ! ^^
MattDF
Messages postés
76
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
5 août 2009
67
4 mars 2008 à 09:46
4 mars 2008 à 09:46
Donc tu as élaboré ce petit code :
Je vois que de cette façon tu comptes les périodes pour les valeurs différentes de "i". Peux tu m'éclairer sur certains points :
- Est ce que les "i" sont comptés en fonction des critères que j'avais posé ? (absence de contenu dans certaines colonnes)
- Comment exploiter les "i" dans la deuxième étape ?
Sub comptePeriode() Dim i As Double For i = 1 To 3 Call ModComptabilise.comptePeriodeSemaine(i, "R", "R2", "U", "U2") Next i For i = 1 To 25 Call ModComptabilise.comptePeriodeMois(i, "Q", "Q2", "T", "T2") Next i For i = 1.5 To 24.5 Call ModComptabilise.comptePeriodeMoisDemi(i, "Q", "Q2", "T", "T2") Next i End Sub
Je vois que de cette façon tu comptes les périodes pour les valeurs différentes de "i". Peux tu m'éclairer sur certains points :
- Est ce que les "i" sont comptés en fonction des critères que j'avais posé ? (absence de contenu dans certaines colonnes)
- Comment exploiter les "i" dans la deuxième étape ?