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 :

fichier suivi activité : macro pour automatiser/ màj fichier/ mise en forme etc..


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Préparateur et chargé d'affaires
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Préparateur et chargé d'affaires
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Bonjour à tous,

    Je me présente rapidement, je m’appelle Romain, j'ai 21 ans et je suis préparateur pour une équipe de maintenance dans une industrie d’électricité.

    J'ai créer un petit fichier excel qui consiste à prévoir les maintenances préventives à l'année.

    Je suis débutant dans les macros et la programmation dans excel en général, ceux pourquoi je vous demanderais,s'il vous plait, d'être assez explicite dans vos programmations et/ou commentaires afin que je puisse apprendre .

    je vous joint une mini copie de mon fichier.

    12 feuilles "Janvier", une autre "février", "Mars" etc....
    1 feuille "Fiche de suivi" (remplir les cases de la fiche par rapport aux données dans les 12 feuilles) (1 feuille par intervention)
    1 feuille "mise à jour"

    Principe du fichier :

    Extraction des intervention par un logiciel à part et collage dans la feuille "mise à jour"
    Exemple : je copie/colle les interventions du mois de janvier.


    1ere MACRO

    Dans la feuille "mise a jour" j'ai un bouton "màj janvier"
    Il faut mettre à jour l'état des interventions.

    Pour faire simple on a des infos fixes et des variables. il faut Reporter la valeur de plusieurs cellules (variables) de "mise à jour" vers "janvier".
    il se peut que des interventions viennent s'intégrer entre temps au programme, il faut donc ajouter les nouvelles interventions dans la feuille "janvier" en mettant correctement en forme (quadrillage) et en surbrillance.

    Cette macro je n'y arrive pas en mode "enregistrement" ...

    2ieme MACRO

    dans la feuille "janvier" j'ai créer un bouton qui copie et colle les cellules de "janvier" vers "Fiche de suivi".
    la macro lance le remplissage de la fiche par rapport a la cellule sélectionnée (colonne fiche de suivi) avant de cliquer sur le bouton. (voir ma macro créée en mode "enregistrement" = mal fait)
    - passage en vert de la cellule avec la date du jour ou la macro a été lancée.
    - boite de dialogue pour me dire : impression ? sélection = oui ou non .

    Pour le moment je n'en suis pas à la. Seul la cellule passe en vert et l'impression se lance directement.


    3ieme MACRO

    dans n'importe quelle feuille des 12 mois :

    Si la valeur d'une cellule dans la colonne "type" est égale à "EP" alors mettre la ligne en gras et en rouge.


    Bon on va déjà essayer de faire ca

    Pour ca me parait beaucoup. lol

    Pouvez vous svp me répondre et me proposer des macros explicites pour répondre à mes besoins ?

    Merci d'avance !!


    suivi prv.xlsx

    Bonsoir,


    Je peux fournir plus d'informations si vous le désirez.

  2. #2
    Membre averti Avatar de arosec
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 324
    Points
    324
    Par défaut
    Bonsoir,

    Ci joint une ébauche de la macro 1...
    Il faut peut être l'adapter un peu!

    Il faut mettre le code dans un nouveau module et utiliser la procédure "test".


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Option Explicit
     
    Public Sub test()
      majOngletMois "janvier"
    End Sub
     
    Sub majOngletMois(strNomDeLaFeuille As String)
    Dim ongletExport As Worksheet
    Dim ligneExport As Long
    Dim ligneExportmax As Long 'Dernière ligne de l'onglet export
    Dim colonneExport As Integer
    Dim ongletMois As Worksheet
    Dim ligneMois As Long
    Dim colonneMois As Integer
    Dim ligneExiste As Boolean
    Dim estLigneDifferente As Boolean
     
      Set ongletExport = ThisWorkbook.Worksheets("mise à jour")
      Set ongletMois = ThisWorkbook.Worksheets(strNomDeLaFeuille)
     
      ligneExportmax = ongletExport.UsedRange.Rows.Count 'Dernière ligne de l'onglet Export
     
      'Parcourir les lignes de l'onglet Export
      For ligneExport = 2 To ligneExportmax
        'On recherche la ligne de l'onglet Export dans l'onglet Mois
        ligneExiste = False
        For ligneMois = 2 To ongletMois.UsedRange.Rows.Count
          estLigneDifferente = False
          For colonneExport = 1 To 11
            If ongletMois.Cells(ligneMois, colonneExport) <> ongletExport.Cells(ligneExport, colonneExport) Then
              estLigneDifferente = True
              Exit For
            End If
          Next colonneExport
          If Not estLigneDifferente Then
            ligneExiste = True
            Exit For
          End If
        Next ligneMois
        'Si la ligne de l'onglet Export existe dans l'onglet Mois
        'on fait une mise à jour
        'sinon, on l'ajoute
        If ligneExiste Then
          'Mettre à jour les informations variables
          ongletMois.Cells(ligneMois, 12) = ongletExport.Cells(ligneExport, 12)
          ongletMois.Cells(ligneMois, 13) = ongletExport.Cells(ligneExport, 13)
          ongletMois.Cells(ligneMois, 14) = ongletExport.Cells(ligneExport, 14)
          ongletMois.Cells(ligneMois, 15) = ongletExport.Cells(ligneExport, 15)
        Else
          'Ajouter une ligne dans l'onglet
          ongletExport.Range("A" & ligneExport & ":P" & ligneExport).Copy
          ongletMois.Paste Destination:=ongletMois.Range(ongletMois.Cells(ongletMois.UsedRange.Rows.Count + 1, 1), _
                                                           ongletMois.Cells(ongletMois.UsedRange.Rows.Count + 1, 16))
        End If
      Next ligneExport
     
      Set ongletMois = Nothing
      Set ongletExport = Nothing
    End Sub
    Cdlt,
    Les ordinateurs sont inutiles. Ils ne savent que donner des réponses.
    Pablo Picasso

  3. #3
    Membre averti Avatar de arosec
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 324
    Points
    324
    Par défaut
    Bonsoir,

    Ci joint une ébauche pour la macro 2.
    Il faudrait l'appeler depuis le bouton de l'onglet janvier...

    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
    Option Explicit
     
    Public Sub chargerFicheSuivi()
    Dim ongletActif As Worksheet
    Dim ongletFicheSuivi As Worksheet
     
      Set ongletActif = ActiveSheet
      Set ongletFicheSuivi = ThisWorkbook.Worksheets("Fiche de suivi ")
     
      ongletFicheSuivi.Range("AG22") = ongletActif.Range("F" & ActiveCell.Row)
      '...Faire de même avec les autres informations
     
      'Passer la ligne en vert
      ongletActif.Range("A" & ActiveCell.Row & ":P" & ActiveCell.Row).Interior.Color = vbGreen
      ongletActif.Range("P" & ActiveCell.Row) = Now
     
      If MsgBox("Souhaitez-vous imprimer la Fiche de Suivi?", vbYesNo, "impression") = vbYes Then
        ongletFicheSuivi.PrintPreview
      End If
     
      Set ongletFicheSuivi = Nothing
      Set ongletActif = Nothing
    End Sub
    Cdlt,
    Les ordinateurs sont inutiles. Ils ne savent que donner des réponses.
    Pablo Picasso

  4. #4
    Membre averti Avatar de arosec
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 324
    Points
    324
    Par défaut
    Bonsoir,

    Ci joint une dernière ébauche pour la macro 3:
    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
    Sub test()
      AlterTypeEP "janvier"
    End Sub
     
    Sub AlterTypeEP(strNomDeLaFeuille As String)
    Dim ongletMois As Worksheet
    Dim lg As Long
     
      Set ongletMois = ThisWorkbook.Worksheets(strNomDeLaFeuille)
     
      lg = 2
      While ongletMois.Cells(lg, 1) > ""
        lg = lg + 1
        If ongletMois.Range("K" & lg) = "EP" Then
          ongletMois.Range("A" & lg & ":P" & lg).Font.Bold = True
          ongletMois.Range("A" & lg & ":P" & lg).Interior.Color = vbRed
        End If
      Wend
     
    End Sub
    cdlt,
    Les ordinateurs sont inutiles. Ils ne savent que donner des réponses.
    Pablo Picasso

  5. #5
    Membre à l'essai
    Homme Profil pro
    Préparateur et chargé d'affaires
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Préparateur et chargé d'affaires
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Salut,

    Pour la macro 1 la mise à jour des lignes se fait correctement.

    Par contre, lorsqu'une nouvelle intervention est présente la macro colle la ligne trop loin après le tableau.

    Est-ce possible de copier la nouvelle ligne et la coller dans la l'onglet du mois, à la dernière ligne du tableau? Ou bien à la première ligne vide ?

    Sinon le mieux serrai de l'insérer à la bonne place. (le tri actuel se fait par colonne "TR" et ensuite par le "RF" le trigramme)

    La modif à faire se trouve au niveau de la destination de collage :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    'MISE A JOUR DES OI
    Option Explicit
     
    Public Sub test()
      majOngletMois
    End Sub
     
    Sub majOngletMois(strNomDeLaFeuille As String)
    Dim ongletExport As Worksheet
    Dim ligneExport As Long
    Dim ligneExportmax As Long 'Dernière ligne de l'onglet export
    Dim colonneExport As Integer
    Dim ongletMois As Worksheet
    Dim ligneMois As Long
    Dim colonneMois As Integer
    Dim ligneExiste As Boolean
    Dim estLigneDifferente As Boolean
     
      Set ongletExport = ThisWorkbook.Worksheets("mise à jour")
      Set ongletMois = ThisWorkbook.Worksheets(strNomDeLaFeuille)
     
      ligneExportmax = ongletExport.UsedRange.Rows.Count 'Dernière ligne de l'onglet Export
     
      'Parcourir les lignes de l'onglet Export
      For ligneExport = 2 To ligneExportmax
        'On recherche la ligne de l'onglet Export dans l'onglet Mois
        ligneExiste = False
        For ligneMois = 2 To ongletMois.UsedRange.Rows.Count
          estLigneDifferente = False
          For colonneExport = 1 To 11
            If ongletMois.Cells(ligneMois, colonneExport) <> ongletExport.Cells(ligneExport, colonneExport) Then
              estLigneDifferente = True
              Exit For
            End If
          Next colonneExport
          If Not estLigneDifferente Then
            ligneExiste = True
            Exit For
          End If
        Next ligneMois
        'Si la ligne de l'onglet Export existe dans l'onglet Mois
        'on fait une mise à jour
        'sinon, on l'ajoute
        If ligneExiste Then
          'Mettre à jour les informations variables
          ongletMois.Cells(ligneMois, 12) = ongletExport.Cells(ligneExport, 12)
          ongletMois.Cells(ligneMois, 13) = ongletExport.Cells(ligneExport, 13)
          ongletMois.Cells(ligneMois, 14) = ongletExport.Cells(ligneExport, 14)
          ongletMois.Cells(ligneMois, 15) = ongletExport.Cells(ligneExport, 15)
        Else
          'Ajouter une ligne dans l'onglet
          ongletExport.Range("A" & ligneExport & ":P" & ligneExport).Copy
          ongletMois.Paste Destination:=ongletMois.Range(ongletMois.Cells(ongletMois.UsedRange.Rows.Count + 1, 1), _
                                                           ongletMois.Cells(ongletMois.UsedRange.Rows.Count + 1, 16))  
        End If
      Next ligneExport
     
      Set ongletMois = Nothing
      Set ongletExport = Nothing
    End Sub

    Je cherche aussi de mon côté. Merci pour le coup de main.

  6. #6
    Membre averti Avatar de arosec
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 324
    Points
    324
    Par défaut
    Bonsoir,

    A priori, il faut modifier le bout de code qui permet de déterminer la dernière ligne du fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ongletMois.UsedRange.Rows.Count
    Replace la part:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ongletMois.Range("A" & Rows.Count).End(xlUp).Row
    Cdlt,
    Les ordinateurs sont inutiles. Ils ne savent que donner des réponses.
    Pablo Picasso

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par Romsteack89 Voir le message
    Salut,
    Par contre, lorsqu'une nouvelle intervention est présente la macro colle la ligne trop loin après le tableau.
    Bien souvent, ce genre de désagrément survient quand on a volontairement, ou même accidentellement, sélectionné ou utilisé une cellule à l'extérieur de la plage officiellement utilisée. Dans ce cas, VBA ne se pose pas de question et inclut la cellule "fautive" dans la plage; même si la cellule est vide.

    Est-ce possible de copier la nouvelle ligne et la coller dans la l'onglet du mois, à la dernière ligne du tableau? Ou bien à la première ligne vide ?
    C'est trop vague dans mon esprit pour que puisse l'affirmer. Je pense qu'il y a moyen en passant par les "Specialcells".

    Tu peux bien souvent corriger la situation manuellement. Tu sélectionnes les lignes vides et peut-être deux ou trois lignes de plus. Ensuite tu les supprimes. En principe cela revient "à la normale". C'est aussi applicable avec les colonnes.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. [XL-2010] Macro pour Ouvrir un fichier Excel a partir d'un autre fichier Excel
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/06/2013, 13h27
  2. Utilisation des Macro pour une copie et mise en forme
    Par Stephane59 dans le forum VBA Word
    Réponses: 6
    Dernier message: 09/02/2013, 15h07
  3. Réponses: 12
    Dernier message: 09/02/2008, 14h41
  4. Réponses: 1
    Dernier message: 15/09/2006, 16h23
  5. [VBA-E] Macro pour convertir un fichier texte en excel
    Par Nicolas67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/05/2006, 14h47

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