VBA pour générer un tableau avec filtres de dates + Remplissage auto
Bonjour à tous et à toutes,
j'ai besoin de votre aide car je désespère.
Voila mes soucis... j'ai un tableau que vous trouverez ci-joint, et sur lequel j'ai 2 travaux à réaliser :
LE 1ER : je souhaite créer une macro qui remplissage automatiquement la colonne date "Sans objet" si :
- la colonne qui la précède contient "Non" ou est vide (dans mon fichier j'ai coloré les colonnes en bleu)
- les 2 colonnes qui la précèdent contiennent "Non" ou sont vides (colonnes colorées en rose dans mon fichier).
LE 2EME : j'ai besoin de créer un bouton qui génère un tableau qui filtre toutes les formations et habilitations dont la date de validité arrive à terme en N+1 ce tableau doit faire apparaitre :
- les noms prénoms des salariés, les libellés de formation et/ou habilitations avec leurs dates de validités .
J'espère vraiment que vous allez pourvoir m'aider
TRES TRES BONNE JOURNEE A VOUS TOUS
Re,
Pour le premier tableau, il n'y a pas besoin de macro:
- Pour les colonnes bleues, la formule est la suivante : =SI(OU(D21="Non";D21="");"Sans objet";"")
- Pour la colonne rose : =SI(OU(ET(S20="Non";R20="Non");ET(S20="";R20=""));"Sans objet";"")
Pour la macro, testez ceci
Sub bouton()
Dim cel As Range
Dim lignefin As Long
Dim colonnefin As Long
Dim dat As Date
Dim datedujour As Date
datedujour = DateSerial(Year(Now()), Month(Now()), Day(Now()))
Dim place As Range
Dim emplacement As Range
Dim celluledeb As Range
Dim cellulefin As Range
Dim lig As Long
Dim col As Long
Dim titre As String
Set celluledeb = Sheets("Tableau habilitations").Range("A14")
lignefin = Sheets("Tableau habilitations").Range("A24").End(xlDown).Row
colonnefin = Sheets("Tableau habilitations").Cells(12, Columns.Count).End(xlToLeft).Column
Set cellulefin = Sheets("Tableau habilitations").Cells(lignefin, colonnefin)
For Each cel In Sheets("Tableau habilitations").Range(celluledeb.Address & ":" & cellulefin.Address)
If IsDate(cel.Value) Then
dat = cel.Value - 365
Set place = Sheets("Tableau").Cells(Rows.Count, "A").End(xlUp)
Set place = Range(place.Address).Offset(1, 0)
Sheets("Tableau").Range(place.Address).Select
If dat <= datedujour Then
lig = cel.Row
col = cel.Column
ActiveCell.Value = Sheets("Tableau habilitations").Range("B" & lig).Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Sheets("Tableau habilitations").Range("B" & lig).Value
ActiveCell.Offset(0, 1).Select
titre = Sheets("Tableau habilitations").Range(cel.Address).Offset(12 - cel.Row, -1).Value
ActiveCell.Value = titre
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Sheets("Tableau habilitations").Range(cel.Address).Value
End If
End If
Next cel
End Sub
Ps : comme vous n'avez pas précisé où doit être le tableau, j'ai créé une nouvelle feuille "Tableau"
Cordialement
Merci pour ta réponse
je souhaite mettre une macro car avec la formule si on entre des données ça l annule ....
Je vais tester ta macro
Pour la Macro ça ne fonctionne pas
J'ai crée le bouton d'exécution dans ma feuille 1 auquel j'ai rattaché la macro et lorsque je clique dessus ...J'ai un message d'erreur...
je t'ai fait une capture écran des 2 écrans ...que je te mets en pièce jointe
Help
Re,
Une erreur dans le code...
Sub bouton()
Dim cel As Range
Dim lignefin As Long
Dim colonnefin As Long
Dim dat As Date
Dim datedujour As Date
datedujour = DateSerial(Year(Now()), Month(Now()), Day(Now()))
Dim place As Range
Dim emplacement As Range
Dim celluledeb As Range
Dim cellulefin As Range
Dim lig As Long
Dim col As Long
Dim titre As String
Set celluledeb = Sheets("Tableau habilitations").Range("A14")
lignefin = Sheets("Tableau habilitations").Range("A24").End(xlDown).Row
colonnefin = Sheets("Tableau habilitations").Cells(12, Columns.Count).End(xlToLeft).Column
Set cellulefin = Sheets("Tableau habilitations").Cells(lignefin, colonnefin)
For Each cel In Sheets("Tableau habilitations").Range(celluledeb.Address & ":" & cellulefin.Address)
If IsDate(cel.Value) Then
dat = cel.Value - 365
Set place = Sheets("Tableau").Cells(Rows.Count, "A").End(xlUp)
Set place = Sheets("Tableau").Range(place.Address).Offset(1, 0)
'J'ai enlevé les "select" ici ce qui fait que les copier-coller se font en arrière plan
If dat <= datedujour Then
lig = cel.Row
col = cel.Column
Sheets("Tableau").Range(place.Address).Value = Sheets("Tableau habilitations").Range("B" & lig).Value
Sheets("Tableau").Range(place.Address).Offset(0, 1).Value = Sheets("Tableau habilitations").Range("B" & lig).Value
titre = Sheets("Tableau habilitations").Range(cel.Address).Offset(12 - cel.Row, -1).Value
Sheets("Tableau").Range(place.Address).Offset(0, 2).Value = titre
Sheets("Tableau").Range(place.Address).Offset(0, 3).Value = Sheets("Tableau habilitations").Range(cel.Address).Value
End If
End If
Next cel
End Sub
Cordialement
Je suis désolée mais dans le tableau, lorsque je clique sur le bouton ça met 2 fois le prénom au lieu du nom et prénom, Concernant le filtre date c'est N+1 et non l'année en cours que je souhaiterais.
Cordialement
Venez à mon aide SVP .....
Mille merciiiiiiiiiis
bonjour "besoin d aide",
Je suis désemparée, j'ai essayé de me débrouiller toute seule mais je n'y parviens pas et je pense n'avoir fait que des bêtises occassionant le "plantage" des macros VBA j'espère vraiment que vous tu vas pouvoir me sauver à nouveau.
Voilà ce qu'il m'arrive :
1° Dans le tableau récap habilitations par salarié généré (onglet " Tableau récap") il n'apparait pas :
- le détail du nom de la formation qui se trouve dans la colonne BL64 -65.....550,
- en ce qui concerne les formations chariots élévateurs, (pour plus de compréhensions j'ai coloré en rouge les colonnes + police en rouge des cellules concernées par ce soucis) comme il en existe plusieurs, il faudrait que que le type de chariot apparaisse dans le tableau généré (exemple chariot R389 Cat 1, Chariot R389 cat3 etc). De plus, il doit également apparaitre si la personne à le CACES et/ou l'autorisation de conduite..
- dans la colonne "Formation le Bruit" (colonne colorée pour compréhension) j'ai supprimé la colonne "date de validité"qui n'était pas utile, pour ne pas modifier toutes mes macros liée à la suppression de la colonne date, j'ai fusionné les 2 lignes, je pense avoir une GROSSE BETISSE en faisant cela car à présent non seulement cette formation ne figure pas dans le tableau généré mais je pense que cela m'a"planté" ma macro car cela ne fonctionne plus (bouton : Tableau synthèse habilitations et bouton "habilitations périmées"
2) Bouton " Habilitations à échéance n+1" : je pense que c'est la même succession de soucis que cité ci dessus.
Pour les chariots il n'y a aucun nom qui apparait, il n'y a que les dates de validités...
Encore mille excuses et HELLLLLP ME SVP Très bonne journée