Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2012, 16h55   #1
Invité régulier
 
Inscription : août 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 41
Points : 6
Points : 6
Par défaut problème avec triple boucles!

Bonjour,
deux problème avec ce codes, (j'applique mes filtre sur des dates!)1)- la valeure qu'il retourne est toujours 1, j'ai essayé de changé les données (dates) avec des strings est il retournes les vraies valeures.
2)- quand il retourne les vraies valeures, il éffaces l'ancien résultat dans la même cellule, il recompte dans la même cellule plusieurs fois. Ici je pense que c'est un problème de boucles.
Merci.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
For i = 2 To 25
For j = 5 To 8
 
For c = 7 To 24
 
    maplage.AutoFilter Field:=c, Criteria1:='Sheets("Calcul").Cells(i,1)  'Sheets("Calcul").Cells(j, 1)
 
Next c
 
Sheets("Calcul").Cells(j, i) = Sheets("Feuil1").Range("A2", Sheets("Feuil1").Range("A65536").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells.Count
Sheets("Feuil1").ShowAllData
 
Next j
Next i
moi244 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 17h16   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Explique-nous ce que tu veux faire exactement, parce qu'outre les problèmes de la macro, j'ai l'impression qu'il y a un gros problème de conception ici.
Je pense qu'avec des NB.SI ou ses équivalents VBA, ça serait 10 fois plus simple.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 22h54   #3
Invité régulier
 
Inscription : août 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 41
Points : 6
Points : 6
Soit F1 c'est Feuil1 et F2 c'est Feuil2
1.1) filtrer sur la colonne 7 dans F1 selon le critère ce trouvant dans la cellule (5,1). compter le nombre de cellule non vide dans la plage F1.(A2:A65536) et retourner le résultat dans la cellule F2.cells(5,2)
1.2) filtrer sur la colonne 8 dans F1 selon le critère ce trouvant dans la cellule (5,1). compter le nombre de cellule non vide dans la plage F1.(A2:A65536) et retourner le résultat dans la cellule F2.cells(5,3)
1.3) 1.4)...etc en augmente à chauqe fois le numéro de colonne dans laquelle on filtre ainsi que le numéro de colonne dans laquelle on veux le résultat.

2.1) cette fois on change le critère: filtrer sur la colonne 7 dans F1 selon le critère ce trouvant dans la cellule (6,1). compter le nombre de cellule non vide dans la plage F1.(A2:A65536) et retourner le résultat dans la cellule F2.cells(6,2)
2.2) filtrer sur la colonne 8 dans F1 selon le critère ce trouvant dans la cellule (6,1). compter le nombre de cellule non vide dans la plage F1.(A2:A65536) et retourner le résultat dans la cellule F2.cells(6,3)

Voici un résumé:

Colonne de filtre : F1.7 critère : F2.cells(5,1) résultat : F2.cells(5,2)
Colonne de filtre : F1.8 critère : F2.cells(5,1) résultat : F2.cells(5,3)
Colonne de filtre : F1.9 critère : F2.cells(5,1) résultat : F2.cells(5,4)

Colonne de filtre : F1.7 critère : F2.cells(6,1) résultat : F2.cells(5,2)
Colonne de filtre : F1.8 critère : F2.cells(6,1) résultat : F2.cells(5,3)
Colonne de filtre : F1.9 critère : F2.cells(6,1) résultat : F2.cells(5,4)

Colonne de filtre : F1.7 critère : F2.cells(7,1) résultat : F2.cells(5,2)
Colonne de filtre : F1.8 critère : F2.cells(7,1) résultat : F2.cells(5,3)
Colonne de filtre : F1.9 critère : F2.cells(7,1) résultat : F2.cells(5,4)
moi244 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 09h33   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Quand je disais ce que tu voulais faire, je ne parlais pas de ce que faisais ta macro, car ça il suffisait de la lire.
Ce que je voulais dire, c'est que j'ai l'impression que tu prends le marteau pilon pour écraser une mouche, avec en plus des risques d'erreurs bien supérieurs. Je te propose autre chose dès que j'ai un moment.

Tu fais en B5
Et tu déroules cette formule sur le nombre de lignes et de colonnes que tu veux.

Parce que sinon, tu peux aussi, copier les valeurs dans un autre classeur, le sauver en csv, l'ouvrir dans une base de donnée, l'encoder avec un algorithme de cryptage, le sérialiser en binaire, l'envoyer en ftp, lui faire un café, et demander à une personne de bonne volonté de compter manuellement le nombre d'occurence de chaque valeur dans chaque colonne... Ca va marcher aussi
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 17h41   #5
Invité régulier
 
Inscription : août 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 41
Points : 6
Points : 6
Rebonjour.
Je ne peux pas utiliser cette fonction pour deux raisons entre autre:
  • cette fonction alourdi beaucoup l'exécution de la fonctio qui dans un fichier qui contient 38501 lignes et 147 colonnes!.
[*]Aussi avec une macro le calcul se fait seulement si on l'exécute![/LIST]Aurriez-vous une meilleurs solutions RAPIDE d'exécution?
D'ailleur c'est pour la rapidité du calcul que je veux utiliser une boucle sur un filtre!
moi244 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 17h50   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Dans ce cas, tu utilises exactement de la même manière
Code :
WorksheetFunction.CountIf
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 17h10   #7
Invité régulier
 
Inscription : août 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 41
Points : 6
Points : 6
Rebonjour,
j'ai essayé votre code, il fonctionnne sur un argument, je ne sais pas comment faire un deuxième et n ème argument.
Merci

Code :
1
2
 
Cells(2, 3) = Application.WorksheetFunction.CountIf(Range(Cells(2, 1), Cells(1000, 1)), "x" And Range(Cells(2, 2), Cells(1000, 2)), "2011-11-12")
moi244 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 18h05   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Essaie avec le code suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
 
Private Const NB_LIGNES As Integer = 3
Private Const NB_COLONNES As Integer = 3
Private Const PREMIERE_COLONNE_F1 As Integer = 7
Private Const PREMIERE_LIGNE_F2 As Integer = 5
 
Public Sub compterOccurences()
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Dim iRow, iCol As Integer
 
    Set F1 = Worksheets("Feuil1")
    Set F2 = Worksheets("Feuil2")
 
    For iCol = 1 To NB_COLONNES
        For iRow = 1 To NB_LIGNES
            F2.Cells(PREMIERE_LIGNE_F2 - 1 + iRow, 1 + iCol).Value = WorksheetFunction.CountIf(F1.Columns(PREMIERE_COLONNE_F1 - 1 + iCol) _
                , F1.Cells(PREMIERE_LIGNE_F2 - 1 + iRow, 1).Value)
        Next iRow
    Next iCol
End Sub
EDIT : Il faut bien sûr adapter le nom des feuilles
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h16.


 
 
 
 
Partenaires

Hébergement Web