Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2012, 10h46   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 90
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 90
Points : 10
Points : 10
Par défaut calcul en VBA

Bonjour les ami(e)s,
J'aurai besoin de votre expertise dans ce domaine dont (j'avoue) je ne suis pas fort.
je dois faire un bouton qui active une macro pour sortir quelques calcul sur l'exemple (voir ci-dessous).

1-la difficulté c'est le calul de la variable diff , qui est la différence en jours ouvrables entre date1 et date 2 (mm/jj/aaaa) !!!

2-aussi un deuxième défi, incrémenté la variable it (par défaut égale à 1) du code_s concerné à chaque retour de la variable code (parcours normal de code de 1 à 8) un retour vers l'arrière est synonyme d'une incrémentation de la variable it du code_s)

Je me creuse les cellules grises mais je ne trouve pas. help.

ID	date1	          date2	     code_s	  code     diff      it
1	12/10/2011	  12/10/2011	1	  1
1	12/10/2011	  12/10/2011	1	  2
1	12/10/2011	  13/10/2011	1	  3
1	13/10/2011	  14/10/2011	2	  4
1	14/10/2011	  15/10/2011	1	  1
1	15/10/2011	  16/10/2011	1	  3
1	16/10/2011	  17/10/2011	2	  4
1	17/10/2011	  17/10/2011	2	  5
1	17/10/2011	  17/10/2011	2	  6
1	18/10/2011	  19/10/2011	3	  7
1	19/10/2011	  20/10/2011	3	  8
2	21/10/2011	  21/10/2011	1	  1
2	21/10/2011	  22/10/2011	1	  2
2	22/10/2011	  23/10/2011	1	  3	
2	23/10/2011	  24/10/2011	2	  4	
2	24/10/2011	  25/10/2011	2	  5	
2	25/10/2011	  27/10/2011	2	  6	
2	27/10/2011	  28/10/2011	3	  7	
2	28/10/2011	  29/10/2011	3	  8
_debutant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h32   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 035
Points : 4 035
Bonjour,

Pour le premier point, dans la fenêtre VBE, clique sur les menus "Outils", "Références" et coche la référence "atpvbaen.xls. Vérifie auparavant que tu as bien coché les macros complémentaires : "Utilitaire d'analyse" et "Utilitaire d'analyse VBA". La macro est la suivante :

Code :
1
2
3
4
5
Sub test()
For Each c In Range([B2], Cells(Rows.Count, 2).End(xlUp))
    c.Offset(, 4) = networkdays(c.Value, c.Offset(, 1).Value)
Next c
End Sub
"networkdays" correspond à la fonction NB.JOURS.OUVRES. Tu peux donc ajouter une plage pour les jours fériés.
Note que tes dates sont au format jj/mm/aaaa, mais que le format n'est qu'une question d'affichage.
Pour le second point, je n'ai pas compris. Peux-tu détailler s'il te plait.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 23h48   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 90
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 90
Points : 10
Points : 10
Merci Daniel. C pour ton aide.
pour le point 2.

La variable diff est la somme des délais de code_s càd ( ∑(date2 - date1) pour chaque code_s).

it étant lié à code_s elle égale à 1 par défaut et s’incrémente à chaque fois que code n’avance pas mais récule.
_debutant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 10h02   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 035
Points : 4 035
Citation:
La variable diff est la somme des délais de code_s càd ( ∑(date2 - date1) pour chaque code_s).
Le même code_s étant présent sur plusieurs lignes, on va retrouver plusieurs fois la même valeur sur plusieurs lignes.

Citation:
it étant lié à code_s elle égale à 1 par défaut et s’incrémente à chaque fois que code n’avance pas mais récule.
Donne-moi, s'il te plait, un exemple concret, ce n'est pas tout à fait clair pour moi.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 00h21   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 90
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 90
Points : 10
Points : 10
Daniel,
l'exemple dans la table au-dessous décrit bien ma situation.
En effet code_s peut être la même pour plusieurs variable code.
it est le compteur de chaque retour en arrière de la variable de code dans un même code_s.

Merci pour ton aide.
_debutant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 10h47   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 035
Points : 4 035
Citation:
l'exemple dans la table au-dessous décrit bien ma situation
Joins cette table s'il te plait.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h49   #7
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour _debutant, Daniel.C, le forum,

Je reformule pour être sûr d’avoir bien compris.

code diff it calculé :
Pour chaque ID,
Initialement, la variable code diff it est égale à 1.
A chaque incrément de ligne, code diff it est incrémentée de 1 si la variation de code_s est positive ou nulle. Dans le cas contraire (variation négative de code_s ), code diff it est réinitialisée à 1.
Je traduis cela par la formule
Code :
=SI(A2=A1;SI(D2-D1<0;1;E1+1);1)
Si A2=A1 : si l'ID est identique
Si D2-D1<0 ;1 : si la variation est négative je réinitialise à 1
E1+1 : sinon, j'incrémente de 1
; 1 : si l’ID est différent, je réinitialise à 1.

Par contre, j'ai considéré qu'il y avait une erreur dans la liste entre la date1 du 14/10/2011 et celle du 15/10/2011 car le code diff it passe de 1 à 3 (incrément de 2).

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h49.


 
 
 
 
Partenaires

Hébergement Web