IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ajouter automatiquement le n° de la semaine et l'année


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 1
    Par défaut Ajouter automatiquement le n° de la semaine et l'année
    Bonjour à tous,

    Je cherche à automatiser le remplissage d'un tableau de données sur VBA mais suis dans l'impasse.. Je n'arrive pas à faire ce que je veux.

    Mon fichier est composé d'une feuille qui sert de base de données avec des dates, et d'une autre avec un tableau qui fait le bilan. Ce sont des dates de déclaration et de fermetures de litiges. A partir de ces indicateurs je construis un graphique.
    Nom : Capture d’écran 2021-03-10 101422.png
Affichages : 121
Taille : 44,6 Ko

    Je cherche à automatiser mon tableau pour que le n° de la semaine et l'année s'ajoutent automatiquement en appuyant sur un bouton. De manière à si la dernière la semaine de mon tableau d'indicateurs est dépassée, je puisse cliquer sur le bouton qui ajoutera automatiquement toutes les semaines manquantes jusqu'à aujourd'hui (sans dépasser le n° de semaine en cours).

    Voici ce que j'ai essayé sur VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Maj_tableau()
    '
    ' Maj_tableau Macro
    ' Maj auto du tableau des indicateurs
    '
     
    '
    Dim derniereLigne As Long
    derniereLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
    ActiveCell.FormulaR1C1 = "=SI(LIGNE()-1=E2;"";SI(NO.SEMAINE.ISO(A2)<10;"S0"&NO.SEMAINE.ISO(A2)&" "&ANNEE(A2)))"
     
     
    End Sub
    Je suis débutant en VBA et n'arrive pas à trouver de solutions.. j'ai pourtant cherché sur de nombreux forums en vain..

    Je vous joins mon fichier.. J'espère que vous pourrez m'aider et vous en serrai très reconnaissant

    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Une idée
    Bonjour
    si j'ai bien compris le problème, c'est de réussir à ajouter les lignes en bas du tableau même si pendant une semaine ou deux il n'y a pas eu de mise à jour

    J'ai pensé à cela :
    Regarder le numéro de semaine de la dernière donnée et le comparer au numéro de la semaine actuelle (comme ce sont des chaines de caractères, il faut un peu "bricoler" pour les extraire)
    Si le n° actuel est + grand, ajouter tous les numéros manquants grâce à un LOOP

    Cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub Test_Fabien()
     
    'Je regarde le dernier numéro de semaine dans le tableau
     
        Dim Derniere_donnee As String
        Derniere_donnee = Val(Right(Left(Range("a65000").End(xlUp), 3), 2))
     
        'Je mets un garde fou pour les 2 dernières semaines de l'année -> ce sera a faire a la main
            If Derniere_donnee >= 52 Then
                MsgBox ("On arrive en fin d'année, mettre à jour à la main"), , "Mise à jour annulée"
                Exit Sub
            End If
     
    'Je regarde le numéro de ma semaine
     
        Dim Ma_donnee_actuelle As String
        Ma_donnee_actuelle = Val(Right(Left(Range("E2"), 3), 2))
     
        If Ma_donnee_actuelle = Derniere_donnee Then
            MsgBox ("La MAJ a déjà eu lieu cette semaine"), , "Mise à jour annulée"
            Exit Sub
        End If
     
    'J effectue un LOOP pour compléter les semaines manquantes
        Dim i As Integer
     
        For i = Derniere_donnee + 1 To Ma_donnee_actuelle
        Range("A" & Range("a65000").End(xlUp).Row + 1).Select
        Selection.Value = "S" & IIf(i < 10, "0" & i, i) & " " & Year(Range("A2"))
        Next i
     
    End Sub
    Tu verras, j'ai inclus un garde fou sur les semaines à partir de sem 52. Sur cette période, il te faudra 'malheureusement' tirer ta formule à la main

    Je ne me suis pas occupé des formules latérales mais comme tu es dans un tableau ca devrait aller.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Remarque sur vos formules
    Re
    j'ai regardé un peu vos formules sur votre feuille 'Travail indicateurs' et pour moi vous vous exposez à un risque d'erreur à ces niveaux là :
    Cellule C7 =NB.SI('Tableau litige'!C2:C456;A7) => moi, je mettrai =NB.SI('Tableau litige'!$C$2:$C$65000;A7).
    Cellule D7 =NB.SI('Tableau litige'!G2:G456;A7) => moi, je mettrai =NB.SI('Tableau litige'!$G$2:$G$65000;A7).

    En effet, sans mettre les $ votre plage d'analyse descend et donc vous prenez le risque - dans des calculs postérieurs - de ne plus analyser les bonnes données.
    Personnellement, comme vous pouvez le voir, je fige tout ca jusqu'à ma ligne 65000 (compatibilité avec les versions < 2003)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Demande d'aide VBA Excel
    Par popo2009 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/02/2010, 20h38
  2. demande d'aide sur VBA
    Par aralth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2007, 06h45
  3. [VBA] Excell : demande d'aide pour une macro
    Par Fealendril dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/01/2006, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo