Trier les anniversaires dans Excel VBA - Macros Excel faciles

Table des matières

Ci-dessous, nous examinerons un programme en Excel VBA ce trie les anniversaires aux mois d'abord et aux jours ensuite (donc nous ignorons les années). Nous voulons l'anniversaire avec le numéro de mois le plus bas en première position. S'il y a des anniversaires avec des numéros de mois égaux, nous voulons d'abord l'anniversaire avec le numéro de jour le plus bas. Es-tu prêt?

Situation:

Remarque : les dates sont au format américain. Les mois d'abord, les jours ensuite. Ce type de format dépend des paramètres régionaux de Windows.

1. Tout d'abord, nous déclarons huit variables. Une variable Date que nous appelons tempDate, une variable String que nous appelons tempName. Les six autres variables sont des variables entières portant les noms monthToCheck, dayToCheck, monthNext, dayNext, i et j.

Dim tempDate en tant que date, tempName en tant que chaîne
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. Nous commençons deux boucles For Next.

Pour i = 2 à 13
Pour j = i + 1 à 13

Exemple : pour i = 2, j = 3, 4,… , 12 et 13 sont cochés.

3. Nous initialisons quatre variables entières. Nous utilisons la fonction Month pour obtenir le mois d'une date et la fonction Day pour obtenir le jour d'une date.

moisVers Vérifier = mois(Cellules(i, 2).Valeur)
dayToCheck = day(Cells(i, 2).Value)
moisSuivant = mois(Cellules(j, 2).Valeur)
jourSuivant = jour(Cellules(j, 2).Valeur)

Par exemple : au départ, pour i = 2; la date de Bregje, et j = i + 1 = 2 + 1 = 3 ; la date de Niels sera choisie.

4. Pour trier correctement les dates, nous comparons la première date (monthToCheck et dayToCheck) avec la date suivante (monthNext et dayNext). Si la prochaine date est « inférieure », nous échangeons les dates et les noms. Ajoutez l'instruction If Then suivante.

Si (monthNext < monthToCheck) Ou (monthNext = monthToCheck And dayNext < dayToCheck) Then
Fin si

Si la déclaration ci-dessus est vraie, nous échangeons les dates et les noms.

Par exemple : pour i = 2 et j = 3, les dates de Bregje et Niels sont vérifiées. MonthNext = 6, monthToCheck = 2. La déclaration ci-dessus n'est pas vraie car monthNext est supérieur à monthToCheck. Excel VBA incrémente j de 1 et répète les lignes de code pour i = 2 et j = 4. Vous pouvez facilement voir que Joost (j = 4) a un numéro de mois plus élevé que Bregje, nous passons donc au suivant. Nous obtenons le même résultat pour j = 5 et j = 6. Lorsque nous arrivons à j = 7, nous avons les variables suivantes : monthNext = 2 et dayNext = 9. MonthToCheck = 2 et dayToCheck = 12. Maintenant, la déclaration ci-dessus est vraie puisque monthNext = monthToCheck et dayNext (9) est inférieur à dayToCheck (12).

5. Nous échangeons les dates. Nous stockons temporairement une date dans tempDate, afin qu'Excel VBA puisse échanger correctement les dates. Ajoutez les lignes de code suivantes dans l'instruction If.

'échanger des dates
tempDate = Cells(i, 2).Valeur
Cellules(i, 2).Valeur = Cellules(j, 2).Valeur
Cells(j, 2).Valeur = tempDate

6. Nous faisons de même avec les noms. Ajoutez les lignes de code suivantes dans l'instruction If.

'changer les noms
tempName = Cells(i, 1).Valeur
Cellules(i, 1).Valeur = Cellules(j, 1).Valeur
Cells(j, 1).Value = tempName

7. Nous fermons la deuxième boucle For Next (En dehors de l'instruction If).

j suivant

Pour i = 2 et j = 7, Excel VBA a échangé les dates et les noms. Cela signifie que nous obtenons Richard à la première position et Bregje à la position 7. Cela signifie également que nous obtenons un nouveau monthToCheck et dayToCheck au début de notre prochaine itération (pour i = 2 et j = 8). Nous allons maintenant comparer Richard avec Dineke (j = 8). Vous pouvez facilement voir qu'il n'est pas nécessaire de remplacer ces dates et ces noms car Richard a une date "inférieure". En fait, il n'est pas nécessaire de remplacer Richard (i = 2) par Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John ( j = 12) et Debby (j = 13). C'est parce que Richard a la date la plus basse. De cette façon, Excel VBA obtiendra (pour i = 2) la date «la plus basse» en première position. Pour obtenir la deuxième date « la plus basse » à la deuxième position, Excel VBA répète exactement les mêmes étapes pour i = 3. Pour obtenir la troisième date « la plus basse » à la troisième position, Excel VBA répète exactement les mêmes étapes pour i = 4, etc.

8. Fermez la première boucle For Next (en dehors de l'instruction If).

Ensuite je

9. Testez votre programme.

Résultat:

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave