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

Excel Discussion :

Remplissage automatique d'un tableau pour impression d'une carte avec plusieurs pages


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 9
    Par défaut Remplissage automatique d'un tableau pour impression d'une carte avec plusieurs pages
    Bonjour à tous!

    Je souhaiterais remplir automatiquement un modèle de tableau que j'ai créé (voir pièce jointe) qui me permettra à terme de générer une carte pliable (4 pages) sur laquelle figurera la liste des habilitations et formations de mes collègues.
    Pour cela, je dispose d'un fichier Excel rempli par les RH sur lequel figure tous les types de formations (1 par onglet). Sur chaque onglet, on a au moins une colonne pour le nom, 1 pour le prénom, 1 pour le détail de la formation (par exemple Niveau 1 ou Niveau 2), et selon les cas de 1 à 3 colonnes pour les dates (formation initiale, recyclage et fin de validité).
    Je dois reporter sur la carte le nom de chaque habilitation et la date de la dernière formation/habilitation + la date de la prochaine à réaliser.
    Malheureusement et je commence déjà à m'étendre, chaque onglet n'a pas exactement la même structure ce qui va forcément me créer des soucis puisque je devrai prendre en compte les spécificités de chaque onglet. Le pire est que je ne pourrai pas demander aux RH de reprendre tous les onglets car de nombreuses formules ont été insérées un peu partout et ajouter des colonnes à certains endroits risque probablement de chambouler leur fichier...

    Bref, mon problème en tant que tel est que je n'ai pas encore les connaissances nécessaires ni l'habitude de faire des macros. J'ai cependant tenté le coup en lisant les tutoriels et j'aurais besoin d'aide sur pas mal de points pour que je puisse m'améliorer. Vous risquez donc d'avoir les yeux qui piquent face à certains de mes codes!
    Le principe de la macro est assez simple, et c'est je pense plutôt une manière de bourrin mais voilà quand-même : je demande à ce que l'on rentre le nom, prénom et poste de la personne, puis je recherche tout simplement en balayant tous les onglets d'abord que le nom corresponde, puis le prénom et je reporte les infos sur la carte : type de formation et dates. On remplit d'abord la page 2 de haut en bas, soit 7 formations, puis on passe à la page 3 qui a donc des lignes identiques à celles de la page 2 mais pas les colonnes.
    La page 4 servira qu'aux habilitations électriques et prendra un autre fichier.Nom : Aide cartes 1.png
Affichages : 690
Taille : 27,6 KoNom : Aide cartes 2.png
Affichages : 679
Taille : 16,3 Ko

    Sur la mise en oeuvre, j'ai notamment du mal (même sur la logique en tant que telle) avec la transition entre les pages 2 et 3 car pour une question de mise en forme pour l'imprimeur, je préfère garder en dernier recours le fait de les séparer...

    En résumé, pourriez-vous jeter un œil à mon code (qui bug encore) et m'aider à l'améliorer et le terminer. Je voudrais vraiment essayer d'en faire un maximum moi-même (après tout c'est le but de ce site) donc une critique avec conseils et guidage sans trop de solution déjà faîte (au moins dans un premier temps sauf si c'est trop compliqué autrement) serait l'idéal pour moi!
    J'ai inséré des commentaires dans le code pour avoir un suivi et vous donner une idée de mon niveau
    Dans tous les cas, je devrai adapter mon cas aux différents types d'onglets évoqués ci-dessus mais je pourrai me débrouiller une fois la première partie réalisée

    Merci d'avance pour votre aide et bon après-midi!

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
     
    Sub Chercher_habilitations()
     
    Dim Nom_famille As String
    Dim Prénom As String
    Dim Poste As String
    Dim Date_formation_initiale As Date
    Dim Date_recyclage As Date
    Dim Date_prochaine_formation As Date
    Dim Compteur As Integer
    Dim Nom_feuille_carte_générée As Variant
     
     
    'Définit les 2 fichiers Excel que l'on utilise (fichier pour fabriquer les cartes d'habilitations et le fichier de suivi rempli par les RH)
    'Il faut changer dans cette macro le chemin des fichiers au cas où l'on change les noms, chemins d'accès...
    Dim Fichier_génération_carte As Workbook
    Dim Fichier_RH As Workbook
    Dim Chemin_fichier_RH As String
    Set Fichier_génération_carte = ThisWorkbook
     
    Chemin_fichier_RH = "Commun\HABILITATIONS\suivi habilitations et autorisations.xls"
    'Workbooks.Open Filename:=Chemin_fichier_RH
    'Set Fichier_RH = Activeworbook
     
     
    'Les valeurs des cellules E1, E2 et E3 (autre feuille du fichier où est écrit le code sont prises en compte ; on lance déjà la macro depuis le fichier donc pas besoin de l'ouvrir à nouveau
    Windows(Fichier_génération_carte).Activate
        Nom_famille = Cells(1, 5).Value
        Prénom = Cells(2, 5).Value
        Poste = Cells(3, 5).Value
     
    ' Les 3 Loop sont peut-être inutiles vu qu'on utilise Application.Inputbox mais faîtes quand-même pour avoir de la pratique
    Do While Len(Nom_famille) = 0
        Compteur = Compteur + 1
        If Compteur = 4 Then GoTo TropDeFautes
        MsgBox "Vous devez obligatoirement renseigner le nom de famille dans la cellule E1. Plus que " & 4 - Compteur & " essais."
        Nom_famille = Application.InputBox("Entrez le nom de famille en faisant attention à la casse", "Nom de la personne habilitée", Type:=2)
        Cells(1, 5).Value = Nom_famille
    Loop
     
    Do While Len(Prénom) = 0
        Compteur = Compteur + 1
        If Compteur = 4 Then GoTo TropDeFautes
        MsgBox "Vous devez obligatoirement renseigner le prénom dans la cellule E2. Plus que " & 4 - Compteur & " essais."
        Prénom = Application.InputBox("Entrez le prénom en faisant attention à la casse", "Prénom de la personne habilitée", Type:=2)
        Cells(2, 5).Value = Prénom
    Loop
     
    Do While Len(Poste) = 0
        Compteur = Compteur + 1
        If Compteur = 4 Then GoTo TropDeFautes
        MsgBox "Vous devez obligatoirement renseigner le poste dans la cellule E3. Plus que " & 4 - Compteur & " essais."
        Poste = Application.InputBox("Entrez le poste de la personne en faisant attention à la casse", "Poste principal de la personne habilitée", Type:=2)
        Cells(3, 5).Value = Poste
    Loop
     
    MsgBox "La personne sélectionnée pour la génération de la carte est :" & Nom_famille & Prénom & ". Elle occuppe le poste de " & Poste
     
     
        Sheets("Modèle carte").Select
        'utiliser worksheets.count si ce qui est en-dessous ne fonctionne pas ; copy After:=Worksheets (Z)
    'Vérifier si un code de ce type existe pour aller directement à la fin des onglets
    Sheets("Modèle carte").Copy After:=lastsheet
        ActiveSheet.Name = (Nom_famille & " " & Prénom)
        Nom_feuille_carte_générée = ActiveSheet.Name
     
     
    'Prévoir un cas où on aurait une feuille avec le même nom (carte déjà générée par exemple)
     
    'On reporte les infos sur la première face de la carte
        Range("M7:Q7").Select
        ActiveCell.FormulaR1C1 = Nom_famille
        Range("M8:Q8").Select
        ActiveCell.FormulaR1C1 = Prénom
        Range("M10:Q10").Select
        ActiveCell.FormulaR1C1 = Poste
        Range("X15:AB15").Select
     
    'Pour boucle for qui balaye toutes les feuilles
    Dim i As Integer
    'Pour boucle nous permettant de remplir chacune des lignes de la carte en page 2 et 3
    Dim k As Integer
     
    'Pour avoir le numéro de ligne et de colonne de la cellule qui correspond à la recherche du nom dans la feuille
    Dim Num_ligne As Integer
    Dim Num_colonne As Integer
    Dim Nom_formation As Variant
    Dim Ligne_carte_Page2 As Integer
    Dim Colonne_carte_Page2 As Integer
    Dim Ligne_carte_Page3 As Integer
    Dim Colonne_carte_Page3 As Integer
    Dim nombre_feuilles As Integer
     
     
     
    'dispo en haut déjà Workbooks.Open Filename:= _
            'Chemin_fichier_RH
     
    nombre_feuilles_fichier_RH = Worksheets.Count
     
    k = 15
     
            'For k = 15 To 21
                For i = 1 To nombre_feuilles_fichier_RH
                    Sheets(i).Select
                    'On cherche une cellule contenant le nom entré
                            Cells.Find(What:=Nom_famille, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
                        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                        , SearchFormat:=False).Activate
                        'Pas sûr que ce soit une erreur - Boîte de message
                        On Error GoTo Nom_sans_habilitation_correspondante
                        'On enregistre les numéros ligne et colonne de la première cellule qui correspond à ce nom
                        Num_ligne = ActiveCell.Row
                        Num_colonne = ActiveCell.Column
                            'On teste si le prenom correspondant au premier nom trouvé est bien le même que celui entré au début (homonymes)
                            'While plus adapté?
                            If Cells(Num_ligne, Num_colonne + 1).Value = Prénom Then
                                Date_formation_initiale = Cells(Num_ligne, Num_colonne + 3)
                                Date_recyclage = Cells(Num_ligne, Num_colonne + 4)
                                Date_prochaine_formation = Cells(Num_ligne, Num_colonne + 5)
                                Nom_formation = Cells(Num_ligne, Num_colonne + 2)
     
                                Windows(Fichier_génération_carte).Activate
     
                            Else: Cells.Find(What:=Nom_famille, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                                    False, SearchFormat:=False).Activate
     
                                    On Error GoTo Nom_sans_habilitation_correspondante
     
                                    Num_ligne = ActiveCell.Row
                                    Num_colonne = ActiveCell.Column
     
                                    Date_formation_initiale = Cells(Num_ligne, Num_colonne + 3)
                                    Date_recyclage = Cells(Num_ligne, Num_colonne + 4)
                                    Date_prochaine_formation = Cells(Num_ligne, Num_colonne + 5)
                                    Nom_formation = Cells(Num_ligne, Num_colonne + 2)
                            End If
     
    Nom_sans_habilitation_correspondante:
                MsgBox "La personne concernée n'est pas habilitée en tant que " & ActiveSheet.Name & " ou il y a une erreur dans le nom."
     
                Next i
            'Next k
     
     
     
    Exit Sub
     
    TropDeFautes:
    MsgBox "Veuillez relire les explications SVP."
     
    End Sub

  2. #2
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 9
    Par défaut
    Bonsoir,

    J'ai corrigé quelques problèmes par tâtonnement mais je reste pour le moment bloqué par une erreur Automation 404 au niveau de la première ligne de ma boucle For i.
    En fait, j'ai tout simplement du mal avec la déclaration de mes variables je pense, notamment celle concernant les classeurs + la manière de sélectionner les feuilles...
    Pour le code, vous pouvez donc regarder que celui de mon second message.
    Si vous pouvez m'aider là-dessus ça m'enlèverait une sérieuse épine du pied!

    Merci encore!

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
     
    Sub Chercher_habilitations()
     
    Dim Nom_famille As String
    Dim Prénom As String
    Dim Poste As String
    Dim Date_formation_initiale As Date
    Dim Date_recyclage As Date
    Dim Date_prochaine_formation As Date
    Dim Compteur As Integer
    Dim Nom_feuille_carte_générée As Variant
     
     
    'Définit les 2 fichiers Excel que l'on utilise (fichier pour fabriquer les cartes d'habilitations et le fichier de suivi rempli par les RH)
    'Il faut changer dans cette macro le chemin des fichiers au cas où l'on change les noms, chemins d'accès...
    Dim Fichier_génération_carte As Workbook
    Dim Fichier_RH As Workbook
    Dim Chemin_fichier_RH As String
    Set Fichier_génération_carte = ThisWorkbook
     
     
    Chemin_fichier_RH = "Commun\HABILITATIONS\suivi habilitations et autorisations.xls"
    Set Fichier_RH = Workbooks.Open(Chemin_fichier_RH)
     
     
    'Les valeurs des cellules E1, E2 et E3 sont prises en compte ; on lance déjà la macro depuis le fichier donc pas besoin de l'ouvrir à nouveau
    ThisWorkbook.Activate
        Nom_famille = Cells(1, 5).Value
        Prénom = Cells(2, 5).Value
        Poste = Cells(3, 5).Value
     
    ' Les 3 Loop sont peut-être inutiles mais faîtes quand-même pour avoir de la pratique
    Do While Len(Nom_famille) = 0
        Compteur = Compteur + 1
        If Compteur = 4 Then GoTo TropDeFautes
        MsgBox "Vous devez obligatoirement renseigner le nom de famille dans la cellule E1. Plus que " & 4 - Compteur & " essais."
        Nom_famille = Application.InputBox("Entrez le nom de famille en faisant attention à la casse", "Nom de la personne habilitée", Type:=2)
        Cells(1, 5).Value = Nom_famille
    Loop
     
    Compteur = 0
    Do While Len(Prénom) = 0
        Compteur = Compteur + 1
        If Compteur = 4 Then GoTo TropDeFautes
        MsgBox "Vous devez obligatoirement renseigner le prénom dans la cellule E2. Plus que " & 4 - Compteur & " essais."
        Prénom = Application.InputBox("Entrez le prénom en faisant attention à la casse", "Prénom de la personne habilitée", Type:=2)
        Cells(2, 5).Value = Prénom
    Loop
     
    Compteur = 0
    Do While Len(Poste) = 0
        Compteur = Compteur + 1
        If Compteur = 4 Then GoTo TropDeFautes
        MsgBox "Vous devez obligatoirement renseigner le poste dans la cellule E3. Plus que " & 4 - Compteur & " essais."
        Poste = Application.InputBox("Entrez le poste de la personne en faisant attention à la casse", "Poste principal de la personne habilitée", Type:=2)
        Cells(3, 5).Value = Poste
    Loop
     
    MsgBox "La personne sélectionnée pour la génération de la carte est : " & Nom_famille & " " & Prénom & ". Elle occuppe le poste de " & Poste
     
     
        Sheets("Modèle carte").Select
        Sheets("Modèle carte").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
        ActiveSheet.Name = (Nom_famille & " " & Prénom)
        Nom_feuille_carte_générée = ActiveSheet.Name
     
     
    'Prévoir un cas où on aurait une feuille avec le même nom (carte déjà générée par exemple)
     
     
        Range("M7:Q7").Select
        ActiveCell.FormulaR1C1 = Nom_famille
        Range("M8:Q8").Select
        ActiveCell.FormulaR1C1 = Prénom
        Range("M10:Q10").Select
        ActiveCell.FormulaR1C1 = Poste
        Range("X15:AB15").Select
     
    'Pour boucle for qui balaye toutes les feuilles
    Dim i As Integer
    'Pour boucle nous permettant de remplir chacune des lignes de la carte en page 2 et 3
    Dim k As Integer
     
    'Pour avoir le numéro de ligne et de colonne de la cellule qui correspond à la recherche du nom dans la feuille
    Dim Num_ligne As Integer
    Dim Num_colonne As Integer
    Dim Nom_formation As Variant
    Dim Ligne_carte_Page2 As Integer
    Dim Colonne_carte_Page2 As Integer
    Dim Ligne_carte_Page3 As Integer
    Dim Colonne_carte_Page3 As Integer
    Dim nombre_feuilles As Integer
    Dim nombre_feuilles_fichier_RH As Integer
     
     
     
    Workbooks.Open Filename:= _
            Chemin_fichier_RH
     
    nombre_feuilles_fichier_RH = Worksheets.Count
     
    ThisWorkbook.Activate
     
    k = 15
     
            'For k = 15 To 21
                For i = 1 To nombre_feuilles_fichier_RH
                    Fichier_RH.Sheets(i).Select
                    'On cherche une cellule contenant le nom entré
                    Range("A1").Select
                            ActiveSheet.Cells.Find(What:=Nom_famille, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
                        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                        , SearchFormat:=False).Activate
                        'Pas sûr que ce soit une erreur - Boîte de message
                        On Error GoTo Nom_sans_habilitation_correspondante
                        'On enregistre les numéros ligne et colonne de la première cellule qui correspond à ce nom
                        Num_ligne = ActiveCell.Row
                        Num_colonne = ActiveCell.Column
                            'On teste si le prenom correspondant au premier nom trouvé est bien le même que celui entré au début (homonymes)
                            'While plus adapté?
                            If Cells(Num_ligne, Num_colonne + 1).Value = Prénom Then
                                Date_formation_initiale = Cells(Num_ligne, Num_colonne + 3)
                                Date_recyclage = Cells(Num_ligne, Num_colonne + 4)
                                Date_prochaine_formation = Cells(Num_ligne, Num_colonne + 5)
                                Nom_formation = Cells(Num_ligne, Num_colonne + 2)
     
                                Windows(Fichier_génération_carte).Activate
     
                            Else: Cells.Find(What:=Nom_famille, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                                    False, SearchFormat:=False).Activate
     
                                    On Error GoTo Nom_sans_habilitation_correspondante
     
                                    Num_ligne = ActiveCell.Row
                                    Num_colonne = ActiveCell.Column
     
                                    Date_formation_initiale = Cells(Num_ligne, Num_colonne + 3)
                                    Date_recyclage = Cells(Num_ligne, Num_colonne + 4)
                                    Date_prochaine_formation = Cells(Num_ligne, Num_colonne + 5)
                                    Nom_formation = Cells(Num_ligne, Num_colonne + 2)
                            End If
     
    Nom_sans_habilitation_correspondante:
                MsgBox "La personne concernée n'est pas habilitée en tant que " & ActiveSheet.Name & " ou il y a une erreur dans le nom."
     
                Next i
            'Next k
     
     
     
    Exit Sub
     
    TropDeFautes:
    MsgBox "Veuillez relire les explications SVP."
     
    End Sub

Discussions similaires

  1. CSS d'impression : Séparer une forme sur plusieurs pages
    Par the5et dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 04/05/2014, 09h53
  2. [SQL-Server] Parser un tableau pour exploitation dans une requête avec IN
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/05/2011, 11h54
  3. Réponses: 2
    Dernier message: 20/06/2009, 18h46
  4. Réponses: 1
    Dernier message: 03/04/2008, 23h38
  5. [VBA-E] Form Excel VB, remplissage automatique d'un tableau
    Par evema dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/04/2007, 14h37

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