Ajout d'années

Bonjour, j'ai un code qui crée une liste déroulante en fonction des années pressente dans un tableau en prenant l’année la plus petite et la plus grande, en effectuant la différence des deux et les réécrire dans un tableau mais j'ai réfléchis et si j'ai par exemple du 2014; 2015 et 1980 il va me proposé dans la liste déroulante les année de 1980 à 2015, donc j'essaye de perfectionner mon code en proposant que les années présente et la je bloque.

Voici mon code ( non fonctionnel ) :

Sub annéestest()

Feuil7.Visible = -1
Feuil7.Cells.ClearContents

Dim Col%, dercol%, derlign%, d%, ligne%, ligne7%, année%, ligeannées%, derlignfeuil7%, ligneajout%

dercol = Feuil4.Cells(1, Cells.Columns.Count).End(xlToLeft).Column
derlign = Feuil4.Range("A65536").End(xlUp).Row

'
'Je Retrouve la colonne adéquate
'

For Col = 1 To dercol
If Feuil4.Cells(1, Col) Like "*AFF_DT_DESI_CA_REA*" Then
d = Col
End If
Next

'
'J'écris la première année dans la cellule A1 de la feuil 7
'

Feuil7.Cells(1, 1).Formula = "=YEAR(SYNTHESE!" & Feuil4.Cells(2, d).Address & ")"

'
' J'écris dans la colonne C la liste de toute les années de la feuil 4  de la colonne récupéré juste avant
'

For ligne7 = 1 To derlign

         Feuil7.Cells(ligne7, 3).Formula = "=YEAR(SYNTHESE!" & Feuil4.Cells(ligne7 + 1, d).Address & ")"
         année = Feuil7.Cells(ligne7, 3)

'
'C'est ici que je bloque.
'
ligneajout = ligneajout + 1
       If année <> Feuil7.Cells(ligne7, 1) Then
         Feuil7.Cells(ligneajout, 1) = année
       End If

Next

derlignfeuil7 = Feuil7.Range("A65536").End(xlUp).Row
    With Feuil6.Range("D2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Année!" & Feuil7.Cells(1, 1).Address & ":" & Feuil7.Cells(derlignfeuil7, 1).Address
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "ANNÉE INEXISTANTE"
        .InputMessage = "Veuillez selectionner une année"
        .ErrorMessage = "L'année choisi n'est pas bonne"
        .ShowInput = True
        .ShowError = True
  End With

End Sub

Je n'arrive pas a réalisé la condition qui compare les années de la colonne C à toute les années en colonne A et si l'année de la colonne C n'existe pas dans la colonne A il l'ajoute à la suite.

Merci pour votre aide.

Cordialement Valentin.

Voici un début (il regarde la cellule c2 et si pas dans colonne a, alors ajout). Il te restera à faire la boucle sur les valeurs de la colonne c.

Sub Test()

Dim Valeur_Test As String
Dim DerniereLigne As Integer
Dim Lig

Valeur_Test = Cells(2, 3).Value 'La valeur qu'on souhaite tester

DerniereLigne = Cells(65536, 1).End(xlUp).Row 'On va aller trouver la dernière ligne de la colonne A

'On va voir si on trouve la valeur testée.
 Set Lig = Range(Cells(1, 1), Cells(DerniereLigne, 1)).Find(Valeur_Test, LookIn:=xlValues, LookAt:=xlWhole)
 If Not Lig Is Nothing Then
     Exit Sub 'Si on la trouve, alors on sort de la macro
 Else
     Cells(DerniereLigne + 1, 1).Value = Valeur_Test 'Sinon, on l'ajoute à la liste.
 End If

End Sub

Merci cela fonctionne et je l'ai integré dans une boucle, mais la je ne comprend pas, quand je lance la procédure grâce à un bouton sur la feuil7 cela fonctionne et me trouve les 3 années différentes et les ranges à la suite, mais si j'appelle cette procédure depuis la feuil hyper vision( grace à

Call années

) cela ne trouve qu'une seul année.

Voici le code modifié :

Option Explicit
Sub années()

Feuil7.Visible = -1
Feuil7.Cells.ClearContents

Dim Col As Integer, dercol As Integer, derlign As Integer, e%, b%, c%, a%, d%, derlignfeuil7%, ligne%, ligne7%, année%, ligeannées%, Valeur_Test As String, test%, DerniereLigne%
Dim Lig

dercol = Feuil4.Cells(1, Cells.Columns.Count).End(xlToLeft).Column
derlign = Feuil4.Range("A65536").End(xlUp).Row
derlignfeuil7 = Feuil7.Range("A65536").End(xlUp).Row

For Col = 1 To dercol
If Feuil4.Cells(1, Col) Like "*AFF_DT_DESI_CA_REA*" Then
d = Col
End If
Next

Feuil7.Cells(1, 1).Formula = "=YEAR(SYNTHESE!" & Feuil4.Cells(2, d).Address & ")"

For ligne7 = 1 To derlign - 1

Feuil7.Cells(ligne7, 3).Formula = "=YEAR(SYNTHESE!" & Feuil4.Cells(ligne7 + 1, d).Address & ")"

Next

For test = 1 To derlign - 1
Valeur_Test = Feuil7.Cells(test, 3).Value 'La valeur qu'on souhaite tester
DerniereLigne = Feuil7.Cells(65536, 1).End(xlUp).Row 'On va aller trouver la dernière ligne de la colonne A

'On va voir si on trouve la valeur testée.
Set Lig = Feuil7.Range(Feuil7.Cells(1, 1), Feuil7.Cells(DerniereLigne, 1)).Find(Valeur_Test, LookIn:=xlValues, LookAt:=xlWhole)
 If Not Lig Is Nothing Then
      'Si on la trouve, alors on sort de la macro
Else
     Feuil7.Cells(DerniereLigne + 1, 1).Value = Valeur_Test 'Sinon, on l'ajoute à la liste.
End If
Next

    With Feuil6.Range("D2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Année!" & Feuil7.Cells(1, 1).Address & ":" & Feuil7.Cells(DerniereLigne, 1).Address
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "ANNÉE INEXISTANTE"
        .InputMessage = "Veuillez selectionner une année"
        .ErrorMessage = "L'année choisi n'est pas bonne"
        .ShowInput = True
        .ShowError = True
    End With

End Sub
Rechercher des sujets similaires à "ajout annees"