Bonjour,
Je dois à partir d'une plage Source (3 critères: Références (RefArt), Date
mini (DateMin) et NbItems (NbArt)) de 4000 lignes, vérifier
dans une plage Destination de 20000 lignes si je trouve pour un voire
plusieurs enrtegistrements les 2 premiers critères.
Si je trouve, je mets dans une colonne dédiée une info (1 puis 1.1 puis 1.2,
etc) correspondant à l'enregistrement trouvé.
Le critère NbItems correspond au nombre de fois ou j'ai la réf Source
présente dans la plage Destination et cela me
permet de quitter ma boucle For Each quand j'ai atteint la valeur de NbItems
afin d'améliorer le temps de traitement.
Ce temps de traitement est quand même de l'ordre d'une heure voire plus.
Le code que j'ai utilisé est fait à l'aide de For Each ...
Peut-être certains d'entre vous ont une méthode permettant un traitement
plus rapide.
Je pense notamment aux variables tableuax mais je ne sais pas trop.plus
Si vous avez une idée à me proser je suis preneur.
Voici le code utilisé
' Recherche des Références avec Date mini
Range([B2], [B65536].End(xlUp)).Select
Set PlgDest = Selection
Range([BI2], [BI65536].End(xlUp)).Select
NbRef = Selection.Rows.Count
Set PlgSource = Selection
I = 1: indice = 0
For Each Cell In PlgSource
Application.StatusBar = "Référence N° " & I & " / " & NbRef
RefArt = Cell.Value: DateMin = Cell.Offset(0, 1).Value: NbArt =
Cell.Offset(0, 2).Value
For Each CellD In PlgDest
If Nb = NbArt Then Exit For
If CellD.Value = RefArt And CellD.Offset(0, 27).Value = DateMin
Then
If indice = 0 Then
CellD.Offset(0, 56).Value = "1"
Nb = Nb + 1
Else
CellD.Offset(0, 56).Value = "1." & indice
Nb = Nb + 1
End If
indice = indice + 1
Else
End If
Next CellD
I = I + 1
indice = 0
Next Cell
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
DB
Bonjour, si tu ne l'a pas déjà fait : avant ce code Application.ScreenUpdating = False et après Application.ScreenUpdating = True
Pour éviter à Excel de mettre à jour les données sur l'écran avant la fin du traitement. Tu peux aussi simplifier If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 par CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 indice = indice + 1 ce qui modifie un peu ton résultat 1.0 1.1 1.2 Tu pourrais aussi remplacer les for each par des boucles "normale" For i=1 To ... Et faire référence aux cellules par cells(i,j) mais c'est plus long à t'expliquer. Avec mon premier commentaire, tu devrai savoir un résultat tangible.
DB
Bonjour, Je dois à partir d'une plage Source (3 critères: Références (RefArt), Date mini (DateMin) et NbItems (NbArt)) de 4000 lignes, vérifier dans une plage Destination de 20000 lignes si je trouve pour un voire plusieurs enrtegistrements les 2 premiers critères. Si je trouve, je mets dans une colonne dédiée une info (1 puis 1.1 puis 1.2, etc) correspondant à l'enregistrement trouvé. Le critère NbItems correspond au nombre de fois ou j'ai la réf Source présente dans la plage Destination et cela me permet de quitter ma boucle For Each quand j'ai atteint la valeur de NbItems afin d'améliorer le temps de traitement. Ce temps de traitement est quand même de l'ordre d'une heure voire plus. Le code que j'ai utilisé est fait à l'aide de For Each ... Peut-être certains d'entre vous ont une méthode permettant un traitement plus rapide. Je pense notamment aux variables tableuax mais je ne sais pas trop.plus Si vous avez une idée à me proser je suis preneur. Voici le code utilisé
' Recherche des Références avec Date mini Range([B2], [B65536].End(xlUp)).Select Set PlgDest = Selection Range([BI2], [BI65536].End(xlUp)).Select NbRef = Selection.Rows.Count Set PlgSource = Selection I = 1: indice = 0 For Each Cell In PlgSource Application.StatusBar = "Référence N° " & I & " / " & NbRef RefArt = Cell.Value: DateMin = Cell.Offset(0, 1).Value: NbArt = Cell.Offset(0, 2).Value For Each CellD In PlgDest If Nb = NbArt Then Exit For If CellD.Value = RefArt And CellD.Offset(0, 27).Value = DateMin Then If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 Else End If Next CellD I = I + 1 indice = 0 Next Cell
D'avance merci
Bonjour,
si tu ne l'a pas déjà fait :
avant ce code
Application.ScreenUpdating = False
et après
Application.ScreenUpdating = True
Pour éviter à Excel de mettre à jour les données sur l'écran avant la fin du
traitement.
Tu peux aussi simplifier
If indice = 0 Then
CellD.Offset(0, 56).Value = "1"
Nb = Nb + 1
Else
CellD.Offset(0, 56).Value = "1." & indice
Nb = Nb + 1
End If
indice = indice + 1
par
CellD.Offset(0, 56).Value = "1." & indice
Nb = Nb + 1
indice = indice + 1
ce qui modifie un peu ton résultat
1.0 1.1 1.2
Tu pourrais aussi remplacer les for each par des boucles "normale" For i=1
To ...
Et faire référence aux cellules par cells(i,j) mais c'est plus long à
t'expliquer.
Avec mon premier commentaire, tu devrai savoir un résultat tangible.
DB
Bonjour,
Je dois à partir d'une plage Source (3 critères: Références (RefArt), Date
mini (DateMin) et NbItems (NbArt)) de 4000 lignes, vérifier
dans une plage Destination de 20000 lignes si je trouve pour un voire
plusieurs enrtegistrements les 2 premiers critères.
Si je trouve, je mets dans une colonne dédiée une info (1 puis 1.1 puis 1.2,
etc) correspondant à l'enregistrement trouvé.
Le critère NbItems correspond au nombre de fois ou j'ai la réf Source
présente dans la plage Destination et cela me
permet de quitter ma boucle For Each quand j'ai atteint la valeur de NbItems
afin d'améliorer le temps de traitement.
Ce temps de traitement est quand même de l'ordre d'une heure voire plus.
Le code que j'ai utilisé est fait à l'aide de For Each ...
Peut-être certains d'entre vous ont une méthode permettant un traitement
plus rapide.
Je pense notamment aux variables tableuax mais je ne sais pas trop.plus
Si vous avez une idée à me proser je suis preneur.
Voici le code utilisé
' Recherche des Références avec Date mini
Range([B2], [B65536].End(xlUp)).Select
Set PlgDest = Selection
Range([BI2], [BI65536].End(xlUp)).Select
NbRef = Selection.Rows.Count
Set PlgSource = Selection
I = 1: indice = 0
For Each Cell In PlgSource
Application.StatusBar = "Référence N° " & I & " / " & NbRef
RefArt = Cell.Value: DateMin = Cell.Offset(0, 1).Value: NbArt =
Cell.Offset(0, 2).Value
For Each CellD In PlgDest
If Nb = NbArt Then Exit For
If CellD.Value = RefArt And CellD.Offset(0, 27).Value = DateMin
Then
If indice = 0 Then
CellD.Offset(0, 56).Value = "1"
Nb = Nb + 1
Else
CellD.Offset(0, 56).Value = "1." & indice
Nb = Nb + 1
End If
indice = indice + 1
Else
End If
Next CellD
I = I + 1
indice = 0
Next Cell
Bonjour, si tu ne l'a pas déjà fait : avant ce code Application.ScreenUpdating = False et après Application.ScreenUpdating = True
Pour éviter à Excel de mettre à jour les données sur l'écran avant la fin du traitement. Tu peux aussi simplifier If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 par CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 indice = indice + 1 ce qui modifie un peu ton résultat 1.0 1.1 1.2 Tu pourrais aussi remplacer les for each par des boucles "normale" For i=1 To ... Et faire référence aux cellules par cells(i,j) mais c'est plus long à t'expliquer. Avec mon premier commentaire, tu devrai savoir un résultat tangible.
DB
Bonjour, Je dois à partir d'une plage Source (3 critères: Références (RefArt), Date mini (DateMin) et NbItems (NbArt)) de 4000 lignes, vérifier dans une plage Destination de 20000 lignes si je trouve pour un voire plusieurs enrtegistrements les 2 premiers critères. Si je trouve, je mets dans une colonne dédiée une info (1 puis 1.1 puis 1.2, etc) correspondant à l'enregistrement trouvé. Le critère NbItems correspond au nombre de fois ou j'ai la réf Source présente dans la plage Destination et cela me permet de quitter ma boucle For Each quand j'ai atteint la valeur de NbItems afin d'améliorer le temps de traitement. Ce temps de traitement est quand même de l'ordre d'une heure voire plus. Le code que j'ai utilisé est fait à l'aide de For Each ... Peut-être certains d'entre vous ont une méthode permettant un traitement plus rapide. Je pense notamment aux variables tableuax mais je ne sais pas trop.plus Si vous avez une idée à me proser je suis preneur. Voici le code utilisé
' Recherche des Références avec Date mini Range([B2], [B65536].End(xlUp)).Select Set PlgDest = Selection Range([BI2], [BI65536].End(xlUp)).Select NbRef = Selection.Rows.Count Set PlgSource = Selection I = 1: indice = 0 For Each Cell In PlgSource Application.StatusBar = "Référence N° " & I & " / " & NbRef RefArt = Cell.Value: DateMin = Cell.Offset(0, 1).Value: NbArt = Cell.Offset(0, 2).Value For Each CellD In PlgDest If Nb = NbArt Then Exit For If CellD.Value = RefArt And CellD.Offset(0, 27).Value = DateMin Then If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 Else End If Next CellD I = I + 1 indice = 0 Next Cell
D'avance merci
JB
Bonjour,
Le référencement des éléments d'un tableau en mémoire est au moin s 10 fois + rapide que le référencement d'une cellule du tableur.
Sub TransfertChampTableau() t = Timer b = [A1:C20000].Value ' transfert dans un tableau b() y = UBound(b, 1) z = UBound(b, 2) For i = 1 To UBound(b, 1) For j = 1 To UBound(b, 2) x = b(i, j) Next j Next i MsgBox Timer - t End Sub
Cordialement JB
On 15 fév, 12:09, DB wrote:
Bonjour, si tu ne l'a pas déjà fait : avant ce code Application.ScreenUpdating = False et après Application.ScreenUpdating = True
Pour éviter à Excel de mettre à jour les données sur l'écran av ant la fin du traitement. Tu peux aussi simplifier If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 par CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 indice = indice + 1 ce qui modifie un peu ton résultat 1.0 1.1 1.2 Tu pourrais aussi remplacer les for each par des boucles "normale" For i =1 To ... Et faire référence aux cellules par cells(i,j) mais c'est plus long à t'expliquer. Avec mon premier commentaire, tu devrai savoir un résultat tangible.
DB
Bonjour, Je dois à partir d'une plage Source (3 critères: Références (Re fArt), Date mini (DateMin) et NbItems (NbArt)) de 4000 lignes, vérifier dans une plage Destination de 20000 lignes si je trouve pour un voire plusieurs enrtegistrements les 2 premiers critères. Si je trouve, je mets dans une colonne dédiée une info (1 puis 1.1 puis 1.2, etc) correspondant à l'enregistrement trouvé. Le critère NbItems correspond au nombre de fois ou j'ai la réf Sour ce présente dans la plage Destination et cela me permet de quitter ma boucle For Each quand j'ai atteint la valeur de Nb Items afin d'améliorer le temps de traitement. Ce temps de traitement est quand même de l'ordre d'une heure voire pl us. Le code que j'ai utilisé est fait à l'aide de For Each ... Peut-être certains d'entre vous ont une méthode permettant un trait ement plus rapide. Je pense notamment aux variables tableuax mais je ne sais pas trop.plus Si vous avez une idée à me proser je suis preneur. Voici le code utilisé
' Recherche des Références avec Date mini Range([B2], [B65536].End(xlUp)).Select Set PlgDest = Selection Range([BI2], [BI65536].End(xlUp)).Select NbRef = Selection.Rows.Count Set PlgSource = Selection I = 1: indice = 0 For Each Cell In PlgSource Application.StatusBar = "Référence N° " & I & " / " & N bRef RefArt = Cell.Value: DateMin = Cell.Offset(0, 1).Value: NbA rt = Cell.Offset(0, 2).Value For Each CellD In PlgDest If Nb = NbArt Then Exit For If CellD.Value = RefArt And CellD.Offset(0, 27).Value = DateMin Then If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 Else End If Next CellD I = I + 1 indice = 0 Next Cell
D'avance merci- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Bonjour,
Le référencement des éléments d'un tableau en mémoire est au moin s 10
fois + rapide que le référencement d'une cellule du tableur.
Sub TransfertChampTableau()
t = Timer
b = [A1:C20000].Value ' transfert dans un tableau b()
y = UBound(b, 1)
z = UBound(b, 2)
For i = 1 To UBound(b, 1)
For j = 1 To UBound(b, 2)
x = b(i, j)
Next j
Next i
MsgBox Timer - t
End Sub
Cordialement JB
On 15 fév, 12:09, DB <D...@discussions.microsoft.com> wrote:
Bonjour,
si tu ne l'a pas déjà fait :
avant ce code
Application.ScreenUpdating = False
et après
Application.ScreenUpdating = True
Pour éviter à Excel de mettre à jour les données sur l'écran av ant la fin du
traitement.
Tu peux aussi simplifier
If indice = 0 Then
CellD.Offset(0, 56).Value = "1"
Nb = Nb + 1
Else
CellD.Offset(0, 56).Value = "1." & indice
Nb = Nb + 1
End If
indice = indice + 1
par
CellD.Offset(0, 56).Value = "1." & indice
Nb = Nb + 1
indice = indice + 1
ce qui modifie un peu ton résultat
1.0 1.1 1.2
Tu pourrais aussi remplacer les for each par des boucles "normale" For i =1
To ...
Et faire référence aux cellules par cells(i,j) mais c'est plus long à
t'expliquer.
Avec mon premier commentaire, tu devrai savoir un résultat tangible.
DB
Bonjour,
Je dois à partir d'une plage Source (3 critères: Références (Re fArt), Date
mini (DateMin) et NbItems (NbArt)) de 4000 lignes, vérifier
dans une plage Destination de 20000 lignes si je trouve pour un voire
plusieurs enrtegistrements les 2 premiers critères.
Si je trouve, je mets dans une colonne dédiée une info (1 puis 1.1 puis 1.2,
etc) correspondant à l'enregistrement trouvé.
Le critère NbItems correspond au nombre de fois ou j'ai la réf Sour ce
présente dans la plage Destination et cela me
permet de quitter ma boucle For Each quand j'ai atteint la valeur de Nb Items
afin d'améliorer le temps de traitement.
Ce temps de traitement est quand même de l'ordre d'une heure voire pl us.
Le code que j'ai utilisé est fait à l'aide de For Each ...
Peut-être certains d'entre vous ont une méthode permettant un trait ement
plus rapide.
Je pense notamment aux variables tableuax mais je ne sais pas trop.plus
Si vous avez une idée à me proser je suis preneur.
Voici le code utilisé
' Recherche des Références avec Date mini
Range([B2], [B65536].End(xlUp)).Select
Set PlgDest = Selection
Range([BI2], [BI65536].End(xlUp)).Select
NbRef = Selection.Rows.Count
Set PlgSource = Selection
I = 1: indice = 0
For Each Cell In PlgSource
Application.StatusBar = "Référence N° " & I & " / " & N bRef
RefArt = Cell.Value: DateMin = Cell.Offset(0, 1).Value: NbA rt =
Cell.Offset(0, 2).Value
For Each CellD In PlgDest
If Nb = NbArt Then Exit For
If CellD.Value = RefArt And CellD.Offset(0, 27).Value = DateMin
Then
If indice = 0 Then
CellD.Offset(0, 56).Value = "1"
Nb = Nb + 1
Else
CellD.Offset(0, 56).Value = "1." & indice
Nb = Nb + 1
End If
indice = indice + 1
Else
End If
Next CellD
I = I + 1
indice = 0
Next Cell
D'avance merci- Masquer le texte des messages précédents -
Le référencement des éléments d'un tableau en mémoire est au moin s 10 fois + rapide que le référencement d'une cellule du tableur.
Sub TransfertChampTableau() t = Timer b = [A1:C20000].Value ' transfert dans un tableau b() y = UBound(b, 1) z = UBound(b, 2) For i = 1 To UBound(b, 1) For j = 1 To UBound(b, 2) x = b(i, j) Next j Next i MsgBox Timer - t End Sub
Cordialement JB
On 15 fév, 12:09, DB wrote:
Bonjour, si tu ne l'a pas déjà fait : avant ce code Application.ScreenUpdating = False et après Application.ScreenUpdating = True
Pour éviter à Excel de mettre à jour les données sur l'écran av ant la fin du traitement. Tu peux aussi simplifier If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 par CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 indice = indice + 1 ce qui modifie un peu ton résultat 1.0 1.1 1.2 Tu pourrais aussi remplacer les for each par des boucles "normale" For i =1 To ... Et faire référence aux cellules par cells(i,j) mais c'est plus long à t'expliquer. Avec mon premier commentaire, tu devrai savoir un résultat tangible.
DB
Bonjour, Je dois à partir d'une plage Source (3 critères: Références (Re fArt), Date mini (DateMin) et NbItems (NbArt)) de 4000 lignes, vérifier dans une plage Destination de 20000 lignes si je trouve pour un voire plusieurs enrtegistrements les 2 premiers critères. Si je trouve, je mets dans une colonne dédiée une info (1 puis 1.1 puis 1.2, etc) correspondant à l'enregistrement trouvé. Le critère NbItems correspond au nombre de fois ou j'ai la réf Sour ce présente dans la plage Destination et cela me permet de quitter ma boucle For Each quand j'ai atteint la valeur de Nb Items afin d'améliorer le temps de traitement. Ce temps de traitement est quand même de l'ordre d'une heure voire pl us. Le code que j'ai utilisé est fait à l'aide de For Each ... Peut-être certains d'entre vous ont une méthode permettant un trait ement plus rapide. Je pense notamment aux variables tableuax mais je ne sais pas trop.plus Si vous avez une idée à me proser je suis preneur. Voici le code utilisé
' Recherche des Références avec Date mini Range([B2], [B65536].End(xlUp)).Select Set PlgDest = Selection Range([BI2], [BI65536].End(xlUp)).Select NbRef = Selection.Rows.Count Set PlgSource = Selection I = 1: indice = 0 For Each Cell In PlgSource Application.StatusBar = "Référence N° " & I & " / " & N bRef RefArt = Cell.Value: DateMin = Cell.Offset(0, 1).Value: NbA rt = Cell.Offset(0, 2).Value For Each CellD In PlgDest If Nb = NbArt Then Exit For If CellD.Value = RefArt And CellD.Offset(0, 27).Value = DateMin Then If indice = 0 Then CellD.Offset(0, 56).Value = "1" Nb = Nb + 1 Else CellD.Offset(0, 56).Value = "1." & indice Nb = Nb + 1 End If indice = indice + 1 Else End If Next CellD I = I + 1 indice = 0 Next Cell
D'avance merci- Masquer le texte des messages précédents -