manière plus rapide que mon sommeprod ---> vba et dico si possible :)
5 réponses
Patrick
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour
base de données et ensuite un nombre de club par activité sportive; par
formule, ça ne pose par de problème mais malgré un pc tout récent et
24Mg de ram, c'est très lent.
Mes colonnes N et O sont donc correctes mais la formule en colonne N
devrait être remplacée par un code vba que je ne sais pas faire.
La formule pour mon nombre de dossier est refaite en vba, OK (voir les
colonnes R et S) .
Je cherche à présent à faire la même chose pour ma colonne N que vous
verrez sur ma feuille.
Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et
si possible avec dico pour ma culture générale des dico pour accélérer
le processus; on imagine cette formule avec 15.000 lignes :(
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
DanielCo
Bonjour, Essaie : Option Base 1 Sub test() Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As Variant Dim Tabl2 As Variant, Tabl() As String Tabl1 = Application.Transpose([BÉNÉFICIAIRE]) Tabl2 = Application.Transpose([Discipline__sportive]) Discipline = Application.Transpose(Range("M7", Cells(Rows.Count, 13).End(xlUp))) ReDim Result(UBound(Discipline)) ReDim Tabl(UBound(Tabl1)) For i = 1 To UBound(Tabl1) If Not IsNumeric(Application.Match(Tabl1(i) & "|" & Tabl2(i), Tabl, 0)) Then Tabl(i) = Tabl1(i) & "|" & Tabl2(i) j = Application.Match(Tabl2(i), Discipline, 0) Result(j) = Result(j) + 1 End If Next i Application.Calculation = xlCalculationManual [T7].Resize(UBound(Result)) = Application.Transpose(Result) Erase Result ReDim Result(UBound(Discipline)) For i = 1 To UBound(Tabl1) For j = 1 To UBound(Discipline) If Tabl2(i) = Discipline(j) Then Result(j) = Result(j) + 1 Exit For End If Next j Next i [U7].Resize(UBound(Result)) = Application.Transpose(Result) Application.Calculation = xlCalculationAutomatic End Sub Il y a peut-être plus rapide. Après la soupe ? Cordialement. Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base de données et ensuite un nombre de club par activité sportive; par formule, ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram, c'est très lent. Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait être remplacée par un code vba que je ne sais pas faire. La formule pour mon nombre de dossier est refaite en vba, OK (voir les colonnes R et S) . Je cherche à présent à faire la même chose pour ma colonne N que vous verrez sur ma feuille. Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si possible avec dico pour ma culture générale des dico pour accélérer le processus; on imagine cette formule avec 15.000 lignes :(
Bonjour,
Essaie :
Option Base 1
Sub test()
Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As
Variant
Dim Tabl2 As Variant, Tabl() As String
Tabl1 = Application.Transpose([BÉNÉFICIAIRE])
Tabl2 = Application.Transpose([Discipline__sportive])
Discipline = Application.Transpose(Range("M7", Cells(Rows.Count,
13).End(xlUp)))
ReDim Result(UBound(Discipline))
ReDim Tabl(UBound(Tabl1))
For i = 1 To UBound(Tabl1)
If Not IsNumeric(Application.Match(Tabl1(i) & "|" & Tabl2(i), Tabl, 0))
Then
Tabl(i) = Tabl1(i) & "|" & Tabl2(i)
j = Application.Match(Tabl2(i), Discipline, 0)
Result(j) = Result(j) + 1
End If
Next i
Application.Calculation = xlCalculationManual
[T7].Resize(UBound(Result)) = Application.Transpose(Result)
Erase Result
ReDim Result(UBound(Discipline))
For i = 1 To UBound(Tabl1)
For j = 1 To UBound(Discipline)
If Tabl2(i) = Discipline(j) Then
Result(j) = Result(j) + 1
Exit For
End If
Next j
Next i
[U7].Resize(UBound(Result)) = Application.Transpose(Result)
Application.Calculation = xlCalculationAutomatic
End Sub
Il y a peut-être plus rapide. Après la soupe ?
Cordialement.
Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base
de données et ensuite un nombre de club par activité sportive; par formule,
ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram,
c'est très lent.
Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait
être remplacée par un code vba que je ne sais pas faire.
La formule pour mon nombre de dossier est refaite en vba, OK (voir les
colonnes R et S) .
Je cherche à présent à faire la même chose pour ma colonne N que vous verrez
sur ma feuille.
Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si
possible avec dico pour ma culture générale des dico pour accélérer le
processus; on imagine cette formule avec 15.000 lignes :(
Bonjour, Essaie : Option Base 1 Sub test() Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As Variant Dim Tabl2 As Variant, Tabl() As String Tabl1 = Application.Transpose([BÉNÉFICIAIRE]) Tabl2 = Application.Transpose([Discipline__sportive]) Discipline = Application.Transpose(Range("M7", Cells(Rows.Count, 13).End(xlUp))) ReDim Result(UBound(Discipline)) ReDim Tabl(UBound(Tabl1)) For i = 1 To UBound(Tabl1) If Not IsNumeric(Application.Match(Tabl1(i) & "|" & Tabl2(i), Tabl, 0)) Then Tabl(i) = Tabl1(i) & "|" & Tabl2(i) j = Application.Match(Tabl2(i), Discipline, 0) Result(j) = Result(j) + 1 End If Next i Application.Calculation = xlCalculationManual [T7].Resize(UBound(Result)) = Application.Transpose(Result) Erase Result ReDim Result(UBound(Discipline)) For i = 1 To UBound(Tabl1) For j = 1 To UBound(Discipline) If Tabl2(i) = Discipline(j) Then Result(j) = Result(j) + 1 Exit For End If Next j Next i [U7].Resize(UBound(Result)) = Application.Transpose(Result) Application.Calculation = xlCalculationAutomatic End Sub Il y a peut-être plus rapide. Après la soupe ? Cordialement. Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base de données et ensuite un nombre de club par activité sportive; par formule, ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram, c'est très lent. Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait être remplacée par un code vba que je ne sais pas faire. La formule pour mon nombre de dossier est refaite en vba, OK (voir les colonnes R et S) . Je cherche à présent à faire la même chose pour ma colonne N que vous verrez sur ma feuille. Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si possible avec dico pour ma culture générale des dico pour accélérer le processus; on imagine cette formule avec 15.000 lignes :(
Non, pas mieux. Cependant, une fois la feuille entièrement calculée, il suffit d'une macro événementielle pour recalculer les seuls résultats ayant évolué. Daniel
Bonjour, Essaie : Option Base 1 Sub test() Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As Variant Dim Tabl2 As Variant, Tabl() As String Tabl1 = Application.Transpose([BÉNÉFICIAIRE]) Tabl2 = Application.Transpose([Discipline__sportive]) Discipline = Application.Transpose(Range("M7", Cells(Rows.Count, 13).End(xlUp))) ReDim Result(UBound(Discipline)) ReDim Tabl(UBound(Tabl1)) For i = 1 To UBound(Tabl1) If Not IsNumeric(Application.Match(Tabl1(i) & "|" & Tabl2(i), Tabl, 0)) Then Tabl(i) = Tabl1(i) & "|" & Tabl2(i) j = Application.Match(Tabl2(i), Discipline, 0) Result(j) = Result(j) + 1 End If Next i Application.Calculation = xlCalculationManual [T7].Resize(UBound(Result)) = Application.Transpose(Result) Erase Result ReDim Result(UBound(Discipline)) For i = 1 To UBound(Tabl1) For j = 1 To UBound(Discipline) If Tabl2(i) = Discipline(j) Then Result(j) = Result(j) + 1 Exit For End If Next j Next i [U7].Resize(UBound(Result)) = Application.Transpose(Result) Application.Calculation = xlCalculationAutomatic End Sub Il y a peut-être plus rapide. Après la soupe ? Cordialement. Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base de données et ensuite un nombre de club par activité sportive; par formule, ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram, c'est très lent. Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait être remplacée par un code vba que je ne sais pas faire. La formule pour mon nombre de dossier est refaite en vba, OK (voir les colonnes R et S) . Je cherche à présent à faire la même chose pour ma colonne N que vous verrez sur ma feuille. Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si possible avec dico pour ma culture générale des dico pour accélérer le processus; on imagine cette formule avec 15.000 lignes :(
Non, pas mieux. Cependant, une fois la feuille entièrement calculée, il suffit
d'une macro événementielle pour recalculer les seuls résultats ayant évolué.
Daniel
Bonjour,
Essaie :
Option Base 1
Sub test()
Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports
As Variant
Dim Tabl2 As Variant, Tabl() As String
Tabl1 = Application.Transpose([BÉNÉFICIAIRE])
Tabl2 = Application.Transpose([Discipline__sportive])
Discipline = Application.Transpose(Range("M7", Cells(Rows.Count,
13).End(xlUp)))
ReDim Result(UBound(Discipline))
ReDim Tabl(UBound(Tabl1))
For i = 1 To UBound(Tabl1)
If Not IsNumeric(Application.Match(Tabl1(i) & "|" & Tabl2(i), Tabl,
0)) Then
Tabl(i) = Tabl1(i) & "|" & Tabl2(i)
j = Application.Match(Tabl2(i), Discipline, 0)
Result(j) = Result(j) + 1
End If
Next i
Application.Calculation = xlCalculationManual
[T7].Resize(UBound(Result)) = Application.Transpose(Result)
Erase Result
ReDim Result(UBound(Discipline))
For i = 1 To UBound(Tabl1)
For j = 1 To UBound(Discipline)
If Tabl2(i) = Discipline(j) Then
Result(j) = Result(j) + 1
Exit For
End If
Next j
Next i
[U7].Resize(UBound(Result)) = Application.Transpose(Result)
Application.Calculation = xlCalculationAutomatic
End Sub
Il y a peut-être plus rapide. Après la soupe ?
Cordialement.
Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base
de données et ensuite un nombre de club par activité sportive; par formule,
ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram,
c'est très lent.
Mes colonnes N et O sont donc correctes mais la formule en colonne N
devrait être remplacée par un code vba que je ne sais pas faire.
La formule pour mon nombre de dossier est refaite en vba, OK (voir les
colonnes R et S) .
Je cherche à présent à faire la même chose pour ma colonne N que vous
verrez sur ma feuille.
Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si
possible avec dico pour ma culture générale des dico pour accélérer le
processus; on imagine cette formule avec 15.000 lignes :(
Non, pas mieux. Cependant, une fois la feuille entièrement calculée, il suffit d'une macro événementielle pour recalculer les seuls résultats ayant évolué. Daniel
Bonjour, Essaie : Option Base 1 Sub test() Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As Variant Dim Tabl2 As Variant, Tabl() As String Tabl1 = Application.Transpose([BÉNÉFICIAIRE]) Tabl2 = Application.Transpose([Discipline__sportive]) Discipline = Application.Transpose(Range("M7", Cells(Rows.Count, 13).End(xlUp))) ReDim Result(UBound(Discipline)) ReDim Tabl(UBound(Tabl1)) For i = 1 To UBound(Tabl1) If Not IsNumeric(Application.Match(Tabl1(i) & "|" & Tabl2(i), Tabl, 0)) Then Tabl(i) = Tabl1(i) & "|" & Tabl2(i) j = Application.Match(Tabl2(i), Discipline, 0) Result(j) = Result(j) + 1 End If Next i Application.Calculation = xlCalculationManual [T7].Resize(UBound(Result)) = Application.Transpose(Result) Erase Result ReDim Result(UBound(Discipline)) For i = 1 To UBound(Tabl1) For j = 1 To UBound(Discipline) If Tabl2(i) = Discipline(j) Then Result(j) = Result(j) + 1 Exit For End If Next j Next i [U7].Resize(UBound(Result)) = Application.Transpose(Result) Application.Calculation = xlCalculationAutomatic End Sub Il y a peut-être plus rapide. Après la soupe ? Cordialement. Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base de données et ensuite un nombre de club par activité sportive; par formule, ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram, c'est très lent. Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait être remplacée par un code vba que je ne sais pas faire. La formule pour mon nombre de dossier est refaite en vba, OK (voir les colonnes R et S) . Je cherche à présent à faire la même chose pour ma colonne N que vous verrez sur ma feuille. Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si possible avec dico pour ma culture générale des dico pour accélérer le processus; on imagine cette formule avec 15.000 lignes :(
Bonjour, Avec un dictionnaire,, c'est beaucoup plus rapide : Sub test3() Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As Variant Dim Tabl2 As Variant, Tabl() As String, Dico As Object Set Dico = CreateObject("Scripting.Dictionary") Tabl1 = Application.Transpose([BÉNÉFICIAIRE]) Tabl2 = Application.Transpose([Discipline__sportive]) Discipline = Application.Transpose(Range("M7", Cells(Rows.Count, 13).End(xlUp))) ReDim Result(UBound(Discipline)) ReDim Tabl(UBound(Tabl1)) For i = 1 To UBound(Tabl1) If Not Dico.exists(Tabl1(i) & "|" & Tabl2(i)) Then Dico.Add Tabl1(i) & "|" & Tabl2(i), Tabl1(i) & "|" & Tabl2(i) ' j = Application.Match(Tabl2(i), Discipline, 0) For x = 1 To UBound(Discipline) If Tabl2(i) = Discipline(x) Then Result(x) = Result(x) + 1 Exit For End If Next x End If Next i Application.Calculation = xlCalculationManual [T7].Resize(UBound(Result)) = Application.Transpose(Result) Erase Result ReDim Result(UBound(Discipline)) For i = 1 To UBound(Tabl1) For j = 1 To UBound(Discipline) If Tabl2(i) = Discipline(j) Then Result(j) = Result(j) + 1 Exit For End If Next j Next i [U7].Resize(UBound(Result)) = Application.Transpose(Result) Application.Calculation = xlCalculationAutomatic End Sub Cordialement. Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base de données et ensuite un nombre de club par activité sportive; par formule, ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram, c'est très lent. Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait être remplacée par un code vba que je ne sais pas faire. La formule pour mon nombre de dossier est refaite en vba, OK (voir les colonnes R et S) . Je cherche à présent à faire la même chose pour ma colonne N que vous verrez sur ma feuille. Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si possible avec dico pour ma culture générale des dico pour accélérer le processus; on imagine cette formule avec 15.000 lignes :(
Bonjour,
Avec un dictionnaire,, c'est beaucoup plus rapide :
Sub test3()
Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As
Variant
Dim Tabl2 As Variant, Tabl() As String, Dico As Object
Set Dico = CreateObject("Scripting.Dictionary")
Tabl1 = Application.Transpose([BÉNÉFICIAIRE])
Tabl2 = Application.Transpose([Discipline__sportive])
Discipline = Application.Transpose(Range("M7", Cells(Rows.Count,
13).End(xlUp)))
ReDim Result(UBound(Discipline))
ReDim Tabl(UBound(Tabl1))
For i = 1 To UBound(Tabl1)
If Not Dico.exists(Tabl1(i) & "|" & Tabl2(i)) Then
Dico.Add Tabl1(i) & "|" & Tabl2(i), Tabl1(i) & "|" & Tabl2(i)
' j = Application.Match(Tabl2(i), Discipline, 0)
For x = 1 To UBound(Discipline)
If Tabl2(i) = Discipline(x) Then
Result(x) = Result(x) + 1
Exit For
End If
Next x
End If
Next i
Application.Calculation = xlCalculationManual
[T7].Resize(UBound(Result)) = Application.Transpose(Result)
Erase Result
ReDim Result(UBound(Discipline))
For i = 1 To UBound(Tabl1)
For j = 1 To UBound(Discipline)
If Tabl2(i) = Discipline(j) Then
Result(j) = Result(j) + 1
Exit For
End If
Next j
Next i
[U7].Resize(UBound(Result)) = Application.Transpose(Result)
Application.Calculation = xlCalculationAutomatic
End Sub
Cordialement.
Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base
de données et ensuite un nombre de club par activité sportive; par formule,
ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram,
c'est très lent.
Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait
être remplacée par un code vba que je ne sais pas faire.
La formule pour mon nombre de dossier est refaite en vba, OK (voir les
colonnes R et S) .
Je cherche à présent à faire la même chose pour ma colonne N que vous verrez
sur ma feuille.
Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si
possible avec dico pour ma culture générale des dico pour accélérer le
processus; on imagine cette formule avec 15.000 lignes :(
Bonjour, Avec un dictionnaire,, c'est beaucoup plus rapide : Sub test3() Dim Tabl1 As Variant, Discipline As Variant, Result() As Integer, Sports As Variant Dim Tabl2 As Variant, Tabl() As String, Dico As Object Set Dico = CreateObject("Scripting.Dictionary") Tabl1 = Application.Transpose([BÉNÉFICIAIRE]) Tabl2 = Application.Transpose([Discipline__sportive]) Discipline = Application.Transpose(Range("M7", Cells(Rows.Count, 13).End(xlUp))) ReDim Result(UBound(Discipline)) ReDim Tabl(UBound(Tabl1)) For i = 1 To UBound(Tabl1) If Not Dico.exists(Tabl1(i) & "|" & Tabl2(i)) Then Dico.Add Tabl1(i) & "|" & Tabl2(i), Tabl1(i) & "|" & Tabl2(i) ' j = Application.Match(Tabl2(i), Discipline, 0) For x = 1 To UBound(Discipline) If Tabl2(i) = Discipline(x) Then Result(x) = Result(x) + 1 Exit For End If Next x End If Next i Application.Calculation = xlCalculationManual [T7].Resize(UBound(Result)) = Application.Transpose(Result) Erase Result ReDim Result(UBound(Discipline)) For i = 1 To UBound(Tabl1) For j = 1 To UBound(Discipline) If Tabl2(i) = Discipline(j) Then Result(j) = Result(j) + 1 Exit For End If Next j Next i [U7].Resize(UBound(Result)) = Application.Transpose(Result) Application.Calculation = xlCalculationAutomatic End Sub Cordialement. Daniel
Bonjour,
dans mon fichier ci annexé, je dois compter un nombre de dossiers pour base de données et ensuite un nombre de club par activité sportive; par formule, ça ne pose par de problème mais malgré un pc tout récent et 24Mg de ram, c'est très lent. Mes colonnes N et O sont donc correctes mais la formule en colonne N devrait être remplacée par un code vba que je ne sais pas faire. La formule pour mon nombre de dossier est refaite en vba, OK (voir les colonnes R et S) . Je cherche à présent à faire la même chose pour ma colonne N que vous verrez sur ma feuille. Je tiens à faire ceci en VBA pour la raison de lenteur évoquée plus haut.
Y-a-t-il une personne ici qui pourrait me dire comment faire en VBA et si possible avec dico pour ma culture générale des dico pour accélérer le processus; on imagine cette formule avec 15.000 lignes :(