Jointure/Comparaison: Premier blocage d'une longue série
Fermé
Agonyme
Messages postés
6
Date d'inscription
mercredi 23 avril 2014
Statut
Membre
Dernière intervention
29 avril 2014
-
Modifié par Agonyme le 23/04/2014 à 14:14
Agonyme Messages postés 6 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 29 avril 2014 - 29 avril 2014 à 09:19
Agonyme Messages postés 6 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 29 avril 2014 - 29 avril 2014 à 09:19
A voir également:
- Jointure/Comparaison: Premier blocage d'une longue série
- Comparaison million milliard - Accueil - Technologies
- Logiciel comparaison photo gratuit - Télécharger - Photo & Graphisme
- Comparaison prix amazon - Accueil - Commerce
- Logiciel de comparaison facial gratuit - Télécharger - Photo & Graphisme
- Les outils de comparaison pdf - Télécharger - PDF
2 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
25 avril 2014 à 10:49
25 avril 2014 à 10:49
Bonjour,
Toutefois je peux essayer de vous créer un fichier équivalent si cela est necessaire
Plutôt les TROIS classeurs
Toutefois je peux essayer de vous créer un fichier équivalent si cela est necessaire
Plutôt les TROIS classeurs
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
http://cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 28/04/2014 à 18:39
Modifié par michel_m le 28/04/2014 à 18:39
J'ai considéré que le tableau "fin" était plus petit que le tableau "début" (bin oui !)
la maquette de W
https://www.cjoint.com/?3DCsGZFoV81
Michel
Option Explicit
Option Base 1
Sub coupler_2tableaux()
Dim Derlig As Integer, T_f1, T_f2, Idx As Integer, Ref As String
Dim D_f1 As Object
Dim T_out, Cptr As Integer
Dim start As Single
Application.ScreenUpdating = False
start = Timer
With Sheets("données1")
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
T_f1 = .Range("A8:B" & Derlig)
Set D_f1 = CreateObject("scripting.dictionary")
For Idx = 1 To UBound(T_f1)
Ref = T_f1(Idx, 1)
If Not D_f1.exists(Ref) Then D_f1.Add Ref, T_f1(Idx, 2)
Next
End With
With Sheets("données2")
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
T_f2 = .Range("A2:B" & Derlig)
End With
'Nbre de données 2 inférieur à nombre de données 1
ReDim T_out(3, 1)
For Idx = 1 To UBound(T_f2)
If D_f1.exists(T_f2(Idx, 1)) Then
Cptr = Cptr + 1
ReDim Preserve T_out(3, Cptr)
T_out(1, Cptr) = T_f2(Cptr, 1)
T_out(2, Cptr) = D_f1.Item(T_f2(Cptr, 1))
T_out(3, Cptr) = T_f2(Cptr, 2)
End If
Next
With Sheets("tableau")
.Range("A2:C20000").Clear
With .Range("A2").Resize(UBound(T_f2), 3)
.Value = Application.Transpose(T_out)
.Borders.Weight = xlThin
End With
.Activate
End With
Application.ScreenUpdating = True
MsgBox "Couplage affaires-début / fin effectué en: " & Timer - start & ".sec"
End Sub
la maquette de W
https://www.cjoint.com/?3DCsGZFoV81
Michel
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
28 avril 2014 à 18:42
28 avril 2014 à 18:42
Une autre méthode certainement + rapide est possible en utilisant ADO et des jointures par SQL mais c'est Lundi....
Agonyme
Messages postés
6
Date d'inscription
mercredi 23 avril 2014
Statut
Membre
Dernière intervention
29 avril 2014
29 avril 2014 à 08:29
29 avril 2014 à 08:29
Merci beaucoup ça semble correspondre à ce que je recherche (enfin j'ai un peu de mal à tout saisir mais bon). Cela dit, dans les classeurs de données, les deux colonnes de numéro d'affaire et de date ne sont pas contiguë (C - I et A - C) Du coup par quoi puis-je remplacer le range(A8:B"&Derlig) ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
29 avril 2014 à 08:51
29 avril 2014 à 08:51
POURQUOI envoyer des exemples bidon qui sentent le "démerdes toi avec ça""???
Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup « En fait, dans la réalité etc... il faut en plus que.... »
Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup « En fait, dans la réalité etc... il faut en plus que.... »
Agonyme
Messages postés
6
Date d'inscription
mercredi 23 avril 2014
Statut
Membre
Dernière intervention
29 avril 2014
29 avril 2014 à 08:56
29 avril 2014 à 08:56
Je regrette, il ne s'agissait pas d'un exemple bidon mais plutôt représentatif mais c'est un détail qui m'a échappé. Je suis conscient du travail bénévole fourni et vous en remercie grandement. Je ne demande rien de plus, juste ce détail m'avait pas paru important mais il se trouve que il l'est en fait. Enfin bon vous pouvez considérer avoir fait ce qu'il fallait pour m'aider, j'essaierai de me débrouiller moi même avec mes inexactitudes. Merci
Agonyme
Messages postés
6
Date d'inscription
mercredi 23 avril 2014
Statut
Membre
Dernière intervention
29 avril 2014
Modifié par Agonyme le 29/04/2014 à 09:21
Modifié par Agonyme le 29/04/2014 à 09:21
Voilà j'ai réglé le soucis, juste à retoucher les classeurs de données. Par contre une chose m'échappe, après la 1499 ème ligne, le tableau est rempli de #N/A , est-ce dû à un dépassement de mémoire où une variable trop longue à votre avis ?
28 avril 2014 à 16:37
Modifié par Agonyme le 28/04/2014 à 16:51
Il faut toutefois noter que le volume réel de données est beaucoup plus conséquent (autour des 20000 lignes)
Merci d'avance