Probléme boucle dans une macro VBA [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
lundi 22 novembre 2010
Statut
Membre
Dernière intervention
2 décembre 2010
-
Messages postés
10
Date d'inscription
lundi 22 novembre 2010
Statut
Membre
Dernière intervention
2 décembre 2010
-
Bonjour,
Ma macro sur VBA excel 2003 souhaite compter dans une colonne le nombre de dates de la même année et du même mois et les répertorier dans un tableau. Exemple :

01/04/2010
08/04/2010
15/04/2010
05/05/2010
06/05/2010
21/06/2010
29/06/2010

Donc ici je voudrais créer un tableau qui contient 3 dans la premiére case ; 2 dans la deuxiéme et 2 dans la troisiéme car il y a trois commandes en avril 2010, 2 en mai et 2 en juin

J'ai donc essayé ce module mais il ne fonctionne pas :

For i = 0 To NombreDélaiOrdo ' boucle qui parcourt toute la colonne H où sont les dates

' on prend chaque date et on compte combien il y en a qui appartiennent
au même mois de la même année

If (Year(Range("H" & 10 + i)) = Year(Range("H" & 10 + i + 1)) And Month(Range("H" & 10 + i)) = Month(Range("H" & 10 + i + 1))) Then
' boucle pour remplir le tableau
For x = 1 To 48
compteur(1, x) = compteur(1, x) + 1 ' on incrémente une case du tableau à chaque fois qu'on satisfait la condition
Next x
x = x - 1


Else
For x = 1 To 48
Next x

End If

Next i ' on peut passer au i suivant si la condition est vérifiée

Je vois bien qu'il y a un probléme avec les x mais je ne vois pas comment faire pour résoudre ce problème.
Merci d'avance


5 réponses

Je suis pas spécialement doué en code VBA cependant je me demande si ceci ne marcherait pas.
( ceci est donc juste la logique a suivre :p).


Compteur = 1
i=0

Pour toutes les dates
  Si Année = AnnéeSuivante et Mois = MoisSuivant
    Compteur = Compteur +1
  Sinon
    Tableau[i] = Compteur
    i = i + 1
    Compteur = 1
  Fin si
Date suivante
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56843 internautes nous ont dit merci ce mois-ci

Messages postés
9523
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 juillet 2020
1 875
bonjour,
peut etre une solution avec deux tableaux
- un premier TabMois qui contiendra tous les mois, donc un premier passage sur la liste des dates pour le remplir
- un deuxième TabOrdo qui contiendra les ordres pour chacun des mois de TabMois
donc une boucle sur TabMois, et pour chaque mois, une boucle sur la liste

RQ. un tableau a deux dimensions peut regrouper les deux tableaux en un seul

bonne suite
Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
151
Bonjour,

J'ai recréé ton problème et fait ce petit bout de code qui fonctionne, peut-être ira-t-il mieux sur ton fichier...?
Par contre j'ai un petit souci sur la récupération de l'année et du mois sur mon excel donc je n'ai vraiment pu tester si ça fonctionnait correctement.


Sub aide_DonGosma() 

Dim compteur_lignes, i As Integer 
Dim annee, mois As Integer 
Dim tabl(7) As Integer 'J'ai pris 7 car j'ai entré 7 dates et tu peux avoir au maximum une commande par mois et par an (mais pour toi ça devrait être NombreDélaiOrdo au lieu de 7) 

For compteur_lignes = 1 To 7 'Même remarque qu'au dessus 
    annee = Year(H & compteur_lignes) 
    mois = Month(H & compteur_lignes) 

        For i = compteur_lignes + 1 To 7 'idem 
             
            If annee = Year(H & i) And mois = Month(H & i) Then 
                    tabl(compteur_lignes) = tabl(compteur_lignes) + 1 
            End If 
             
        Next i 
         
Next compteur_lignes 

For i = 1 To 7 
MsgBox (tabl(i)) 
Next 

End Sub 


A+
Messages postés
16173
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juillet 2020
2 999
Bonjour,

Tu tiens absolument à du VBA ?

Ce problème se résout en 5 minutes avec un tableau croisé dynamique...
Tu dis si ça t'intéresse...
Messages postés
10
Date d'inscription
lundi 22 novembre 2010
Statut
Membre
Dernière intervention
2 décembre 2010
1
ok merci à tous , oui je tiens absolument à du VBA!

Je vais tester vos codes mais à priori ils ont l'air de fonctionner! merci