Calculer NB d'alertes en fct de données d'un autre fichier

Bonjour à toutes et à tous,

Je suis nouveau en programmation VBA et je voudrais commencer à automatiser certaines de mes tâches régulières ...

Voici pour commencer ce que je souhaite faire :

A l'aide d'une macro remonter le Nombre d'alertes (Dans le Fichier "NB Alerts") présentes dans un autre fichier ("Suivi Alerts") si :

- la valeur de la cellule colonne A (Comptabilisé) = "OUI"

- ET en fonction du Mois.

Pour résumé tel Mois j'ai eu tant d'alertes comptabilisées.

J'ai pas mal de lignes de données et il s'en rajoute régulièrement.

Le top serai que la Macro dans le fichier "NB Alerts" fonctionne sans avoir à ouvrir le fichier "Suivi Alerts" contenant les données ! (qu'on aille piocher directement dedans).

J'espère avoir été assez clair, je joins aussi 2 fichiers "Types".

J'ai essayé de regarder si une demande similaire existait sur le forum mais je n'arrive pas à l'appliquer sur mon cas.

J'arrive pour le moment à faire quelques petites macro avec l'enregistreur mais ça s'arrête là désolé

Je pense que de voir un cas qui fonctionne sur mon fichier va m'aider à reproduire le code pour d'autres choses.

Je vous remercie de votre aide.

14nb-alerts.xlsx (10.40 Ko)
15suivi-alerts.xlsx (8.88 Ko)

Salut,

Je n'ai pas ouvert les fichiers mais tu as testé une simple liaison entre les deux classeurs?

dans ton fichiers NB Alerts de faire une SOMME.SI (ou le plus adapté) qui pointe sur le deuxième classeur avec en condition COLONNE A ="OUI" et COLONNE MOIS = "JANVIER"

Et tu fais au total 12 formules, 1 pour chaque mois

ECG

Bonjour ECG,

Tout d'abord merci de m'avoir répondu !

A la base je souhaitais faire une macro pour pouvoir la réutiliser dans d'autres cas peut être plus complexes (je vais avoir d'autres calculs à automatiser).

J'ai tenté de faire le calcul avec la formule NB.SI.ENS mais je dois mal déclarer mes critères (mon critère de date je pense) parce que ça me remonte 0 ... Pourtant j'utilise l'assistant de fonction ...

=NB.SI.ENS('[Suivi Alertes.xls]ONGLET'!$A:$A;"OUI";'[Suivi Alertes.xls]ONGLET'!$B:$B;">=R6";'[Suivi Alertes.xls]ONGLET'!$B:$B;"<S6")

R6 = 01/01/2016

S6 = 01/02/2016

Du coup je suis un peu en panne ^^

Bonjour,

Au passage, si R6 et S6 sont des références de cellules, les critères doivent s'écrire : ">="&R6 et "<"&S6

Cordialement.

Bonjour,

Je venais justement partager le fait que j'avais réussi en utilisant "<"&Cellule comme syntaxe.

Ça fonctionne très bien du coup merci beaucoup !

Tant pis pour la macro je verrais quand ça sera vraiment indispensable.

Bonne journée à tous.

Re,

S'agissant de ton autre question, que je n'avais pas regardée, pourquoi 2 fichiers ?

La comptabilisation du nombre d'alertes peut très bien être faite dans le fichier de Suivi où elles sont recensées !

Cordialement.

Re,

En fait ici c'était un exemple.

J'ai plusieurs fichiers de données où je vais piocher ce qu'il me faut pour faire des indicateurs (Le fichier que j'ai appelé "NB Alerts" c'est mon fichier" indicateurs"). Pour le moment tous mes calculs et mes graphes sortent automatiquement et il me manque plus qu'à aller chercher les infos de bases pour mes calculs (là je dois aller dans chaque fichiers de données faire un copier coller, compter un nombre de valeurs, etc ...). C'est pour ça que j'aurai voulu quelque chose qui me mets à jour les infos automatiquement, sans avoir à ouvrier chaque fichiers de données (qui sont régulièrement modifiés).

Et dans mon entreprise on ne modifie pas les fichiers comme ça . Le fichier de Suivi c'est pas un truc que je gère mais que j'utilise.

Pour l'instant je vais essayer de ne pas m'embêter avec les macros, si je peux tout faire avec des fonctions même si c'est moins "sexy" que d'appuyer sur un bouton .

Les macros à mon niveau de compétence c'est bien pour de la mise en page récurrente mais ça devient c'est beaucoup trop lourd (et trop long) si c'est plus compliqué.

Cordialement

Je comprends ta problématique, dont il résulte que les deux fichiers ont un statut d'utilisation différent...

Avec la nécessité de deux fichiers bien distincts, il était logique d'assurer la mise à jour d'éléments de Nb Alerts à partir des modifications de Suivi Alerts... mais s'il t'est interdit de greffer quoi que ce soit sur ce fichier...

Quelle la nature de tes interventions sur Suivi Alerts ? Y interviens-tu en rapport avec les alertes ou ne fais-tu qu'y prélever des données que tu utilises ailleurs ?

La récupération que tu envisageais est dans tous les cas quelque chose d'assez simple, mais au cas particulier la méthode va être liée au contexte, plus qu'aux données elles-mêmes... !

Cordialement.

J'ai entièrement accès au fichier "Suivi Alertes" (en lecture et écriture) et aux autres fichiers dont j'ai besoin.

C'est plutôt par principe que je ne modifie pas ces fichiers ou que je ne fait pas d'actions dessus, afin d'éviter les éventuelles erreurs de manip et tout détruire ^^.

Mon seul petit problème avec ma formule c'est que je dois avoir le fichier de données ouvert pour pas que ça me mette #Valeurs...

Et du coup, je fais évoluer ma demande, est-ce que c'est possible d'aller récupérer des infos sur un extract SAP non enregistrée ?

Cordialement

Salut,

Je vois que la question a évoluée, pour SAP je ne sais pas désolé ^^

Sinon pour la macro si jamais cela intéresse quelqu'un (voir toi pour une autre fois) j'en ai fais une surtout que c'est rapide:

Sub MACRO()
Dim NOM_FICHIER_SUIVI_ALERT As String, NOM_FICHIER_NB_ALERTS As String
Dim BALAYAGE_LIGNE As Integer, COLONNE_VALEUR As Integer, COLONNE_MOIS As Integer
Dim TABLEAU_VALEUR_PAR_MOIS(11) As Integer, MOIS As Integer
'Un tableau commence à 0 et pas 1 donc on va de 0 0 11 et pas de 1 à 12 pour les mois

NOM_FICHIER_SUIVI_ALERT = "Suivi Alerts.xlsx"
NOM_FICHIER_NB_ALERTS = "NB Alerts.xlsx"
BALAYAGE_LIGNE = 2 'ta première ligne à balayer, la 1 est surement pour le titre de tes colonnes

COLONNE_VALEUR = 1 'col A dans ton explication
COLONNE_MOIS = 2  'a changer par toi

'on met le tableau des alertes à 0 par sécurité
For MOIS = 0 To 11
    TABLEAU_VALEUR_PAR_MOIS(MOIS) = 0
Next

'on boucle tant qu'on a des lignes dans le fichier de suivi d'alert
'cela part de l'hypothèse que la cellule avec ta valeur comptabilisé soit remplie par "oui" ou n'importe quoi d'autre et qui si c'est vide_
'alors c'est que toute la ligne est vide, à modifier si ton fichier ne fonctionne pas de cette façon

'on calcule toutes les alertes pour chaque mois
Do Until Workbooks(NOM_FICHIER_SUIVI_ALERT).Worksheets("Feuil1").Cells(BALAYAGE_LIGNE, COLONNE_VALEUR).Value = ""
    If Workbooks(NOM_FICHIER_SUIVI_ALERT).Worksheets("Feuil1").Cells(BALAYAGE_LIGNE, COLONNE_VALEUR) = "OUI" Then
        Select Case Workbooks(NOM_FICHIER_SUIVI_ALERT).Worksheets("Feuil1").Cells(BALAYAGE_LIGNE, COLONNE_MOIS).Value
            Case "JANVIER"
                MOIS = 0
            Case "FEVRIER"
                MOIS = 1
            Case "MARS"
                MOIS = 2
            'A faire jusqu'au mois de décembre
            'Rappel :on a un décalage de 1 car on a un tableau pour les mois et cela commence à 0 et pas 1
            Case Else

                MsgBox "Le mois n'est pas une valeur reconnue"
                Goto SORTIE
        End Select
        TABLEAU_VALEUR_PAR_MOIS(MOIS) = TABLEAU_VALEUR_PAR_MOIS(MOIS) + 1

    End If
    SORTIE:
    BALAYAGE_LIGNE = BALAYAGE_LIGNE + 1
Loop

'on récupère les données
For MOIS = 0 To 11
    Workbooks(NOM_FICHIER_NB_ALERTS).Worksheets("Sheet1").Cells(MOIS + 2, 2) = TABLEAU_VALEUR_PAR_MOIS(MOIS)
Next
'si tu as énormément de ligne passer par un tableau serait intéressant, à voir si cette macro met énormément de temps à se faire sur ton fichier   

End Sub

Sinon sans ouvrir le fichier il y a des solutions mais je ne maitrise pas (je pourrais te filer des liens, ou fait une recherche google ^^)

ECG

Salut ECG,

Alors moi je me suis fait un truc un peu plus simple mais certainement pas très optimal :

Sub MaJ_Alerts()
'
' MaJ_Alerts Macro
'

    Range("F9:AO9").Select
    Selection.ClearContents         'On efface ce qu'il y a avant

    Range("F9").Select              'On rentre la formule dans la 1ère cellule
    ActiveCell.FormulaR1C1 = "=COUNTIFS('[Suivi Alertes.xls]MIRAIL'!C1,""OUI"",'[Suivi Alertes.xls]MIRAIL'!C2,"">=""&R[-3]C,'[Suivi Alertes.xls]MIRAIL'!C2,""<""&R[-3]C[1])"

    Range("F9").Select              'On étend la formule aux autres case de la sélection
    Selection.AutoFill Destination:=Range("F9:AO9"), Type:=xlFillDefault

    Range("F9:AO9").Select          'On Copy/Paste le résultat en valeur
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    Application.CutCopyMode = False

    Range("B1").Select

End Sub

Je pense que je vais reprendre tes boucles pour éviter d'avoir une sélection figée style : Range("F9:AO9")

Ensuite il ne me manquera plus qu'a réussir à faire ça sans ouvrir le fichier "Suivi Alertes" pour être au top.

J'ai regardé sur internet une solution mais sans succès pour le moment.

En tout cas merci d'avoir pris le temps de me proposer cette solution !

Bonne soirée.

Courage ^^

Si tu as d'autres soucis n'hésites pas

ECG

Rechercher des sujets similaires à "calculer alertes fct donnees fichier"