Code VBA pour calcul automatique et listing d'éléments

Fermé
KLA - Modifié par KLA le 2/06/2016 à 12:17
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 3 juin 2016 à 17:05
Bonjour,
En vous remerciant d'avance de l'attention portée à ma publication.

Je vous expose la situation :
Dans le lien ci-dessous (cjoint) se trouve un tableur excel doté de trois feuilles ;
Sur la première, une liste de navires correspondant à une année et un état.
Sur la deuxième, le cumul de certains navires pour l'année courante
Sur la troisième, la liste complète de certains navires pour cette même année courante.

Ce document doit m'aider à renseigner un nombre de navires ayant quitté le port cette année (sur la feuille 2) ainsi qu'a obtenir la liste de tous ces navires après leur départ (feuille 3)

Le besoin que j'ai consiste à utiliser la première feuille comme données sources pour remplir de manière automatisée les feuilles 2 et 3.
Lorsqu'un navire possède l'état "E" ou "X" sur la feuille1, il faut que la valeur des navires cumulés dans le feuille2 augmente de 1. Cette valeur cumulée ne concerne que les navires pour l'année courante.
De plus, chaque navire ayant cet état "E" ou "X" doit apparaître individuellement dans la liste 3, et ce associé à son année de départ


Voici le document joint :
http://www.cjoint.com/c/FFckbfMDG7i

Merci à tous ceux qui pourront m'aider ou auront essayé.

Cordialement,
KLA

PS : ma version d'excel est 2010.
A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juin 2016 à 14:49
bonjour

pour la feuile1
A2:A26 nommé "navire"
B2:B26 nommé An_O
C2:C26 nommé "etat"

en H6 feuil2

=SOMMEPROD((an_0=ANNEE(AUJOURDHUI()))*((etat="E")+(etat="X")))
0
Bonjour michel_m,

J'ai tenté d'utiliser cette fonction, mais cela ne semble pas concluant. La case H6 affiche une erreur #valeur...
De plus, cela ne me permet pas de transférer les lignes des navires sur la troisième feuille.

Il s'agit peut-être d'une erreur de ma part, cependant j'ai vérifié maintes fois l'exactitude de la ligne de fonction. Peut-être s'agit-il de la manière de nommer les cellules ? Je me suis contenté de modifier les en-têtes du tableau feuil1, ne sachant pas comment (ni même s'il est possible) de renommer une plage de cellules sans passer par le VBA.

En vous remerciant de votre aide, j'espère que vous saurez éclaircir cette incompréhension qui me mène a une erreur.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > KLA
3 juin 2016 à 10:35
Bonjour

pour H6 feuil2, pas besoin de VBA

peut-^tre : lire An_0 et non AN_O

voir
http://www.cjoint.com/data3/FFdiHI4stQt_ccm-cumul-double.xlsx

je n'ai pas regerdé pour la feuil3 (pas trop compris la demande
0
Je vais aller vérifier ça et reviens donner des nouvelles dès que possible. Encore merci pour le temps que vous me consacrez.


Pour la feuille3, je vais essayer d'être simple : tous les navires qui sont partis (et donc qui participent à la somme en H6 feuil2) doivent apparaître listés sur la feuil3 (un simple copié/collé de leur nom). Néanmoins il ne faut afficher que ceux étant partis pendant l'année calendaire en course.

Par exemple : en feuil1, Navire2 et Navire3 affichent des états de départs ("E" ou "X"), mais sont antérieur (2011) à l'année courante, il ne faut donc pas les copier. Par contre, Navire 20 affiche un état de départ pour l'année actuelle (2016), il faudra donc que "Navire20" soit copié/collé automatiquement dans le tableau feuil3.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
3 juin 2016 à 17:05
re,

en définitive, j'ai tout fait par VBA comme tu le souhaitais (formule matricielle pas piquée des hannetons et lente pour la feuil3

Option Explicit
Const etatE As String = "E"
Const etatX As String = "X"
'------------------------------------------------------------
Sub reperer_avec_Trois_critères()
Dim An_0 As Integer, Derlig As Byte, Cptr As Byte, Dico As Object

Application.ScreenUpdating = False
Set Dico = CreateObject("scripting.dictionary")
An_0 = Year(Date)
With Sheets(1)
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
For Cptr = 2 To Derlig
If (.Cells(Cptr, "B") = An_0) * ((.Cells(Cptr, "C") = etatE) + (.Cells(Cptr, "C") = etatX)) Then
Dico.Add .Cells(Cptr, "A"), ""
End If
Next
End With
With Sheets(2)
.Range("H6") = Dico.Count
End With
With Sheets(3)
.Range("C2") = An_0
.Range("B2:B200").Clear
.Range("B2").Resize(Dico.Count, 1) = Application.Transpose(Dico.keys)
.Range("B2:B" & 2 + Dico.Count).Borders.Weight = xlThin
End With
End Sub

0