Double Comparaison colonne
Résolu/Fermé
TintinU2
-
20 oct. 2015 à 16:42
TintinU2 Messages postés 79 Date d'inscription lundi 26 octobre 2015 Statut Membre Dernière intervention 8 juillet 2016 - 26 oct. 2015 à 12:24
TintinU2 Messages postés 79 Date d'inscription lundi 26 octobre 2015 Statut Membre Dernière intervention 8 juillet 2016 - 26 oct. 2015 à 12:24
A voir également:
- Double Comparaison colonne
- Double ecran - Guide
- Whatsapp double sim - Guide
- Déplacer une colonne excel - Guide
- Colonne word - Guide
- Additionner colonne excel - Guide
4 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 743
21 oct. 2015 à 07:22
21 oct. 2015 à 07:22
Bonjour,
Peux tu nous passer, via cjoint, un extrait de ton classeur sans données confidentielles?
Au besoin, ne conserve que les données des colonnes B et M.
Peux tu nous passer, via cjoint, un extrait de ton classeur sans données confidentielles?
Au besoin, ne conserve que les données des colonnes B et M.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 743
21 oct. 2015 à 11:43
21 oct. 2015 à 11:43
Bon.
Voici le premier jet.
Une petite explication préalable.
La macro ci-dessous créée 2 feuilles dans le classeur. Pourquoi? pour ne pas effacer tes données si le code ne fait pas exactement ce que tu souhaites. Ces 2 feuilles servent de feuilles de restitution des données après le traitement.
Dans le code ci-dessous, tu trouveras un "paragraphe" de constantes à adapter. Tu dois modifier (ou pas) les valeurs de ces constantes (entre guillemets).
Il y a également des lignes pour calculer le temps de traitement. Tu pourras les supprimer après tests. Peux tu nous dire le résultat en secondes?
Voici le fichier exemple
et le code :
Voici le premier jet.
Une petite explication préalable.
La macro ci-dessous créée 2 feuilles dans le classeur. Pourquoi? pour ne pas effacer tes données si le code ne fait pas exactement ce que tu souhaites. Ces 2 feuilles servent de feuilles de restitution des données après le traitement.
Dans le code ci-dessous, tu trouveras un "paragraphe" de constantes à adapter. Tu dois modifier (ou pas) les valeurs de ces constantes (entre guillemets).
Il y a également des lignes pour calculer le temps de traitement. Tu pourras les supprimer après tests. Peux tu nous dire le résultat en secondes?
Voici le fichier exemple
et le code :
Option Explicit Sub Compare2colonnes() Dim SheetRestiBdd As Worksheet, SheetRestiExtr As Worksheet Dim T_In_Extract(), T_In_Bdd(), T_Out_Extract(), T_Out_Bdd() Dim Entete_Cols_Extr(), Entete_Cols_Bdd() Dim Dico_Extract As Object, Dico_Bdd As Object Dim DLig As Long, DLigTemp As Long, i As Long, Ligne As Long, Cpt_Out_Ectract As Long, Cpt_Out_Bdd As Long Dim Nb_Col As Integer, j As Integer '--------------------------------- 'A ADAPTER : Const NOM_FEUIL_EXTRACT As String = "Extraction" Const NOM_FEUIL_BDD As String = "Base de donnée" Const AJOUT_FEUIL_EXTRACT As String = "Extraction apres macro" Const AJOUT_FEUIL_BDD As String = "Bdd apres macro" Const NUM_LIGN_DEBUT As Integer = 2 Const LETTRE_DERNIERE_COLONNE As String = "P" '--------------------------------- '--------------------------------- 'Lignes à supprimer après tests Dim t As Single t = Timer '--------------------------------- 'création des 2 feuilles de restitution des données If Not Feuil_Exist(ThisWorkbook.Name, AJOUT_FEUIL_BDD) Then Sheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = AJOUT_FEUIL_BDD End If If Not Feuil_Exist(ThisWorkbook.Name, AJOUT_FEUIL_EXTRACT) Then Sheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = AJOUT_FEUIL_EXTRACT End If 'Initialisation des variables Nb_Col = Asc(LETTRE_DERNIERE_COLONNE) - Asc("A") + 1 Set Dico_Bdd = CreateObject("Scripting.Dictionary") Set Dico_Extract = CreateObject("Scripting.Dictionary") Set SheetRestiExtr = Sheets(AJOUT_FEUIL_EXTRACT) Set SheetRestiBdd = Sheets(AJOUT_FEUIL_BDD) 'Enregistrement, en mémoire, des données des deux feuilles With Sheets(NOM_FEUIL_EXTRACT) DLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row DLigTemp = .Columns(13).Find("*", , , , xlByColumns, xlPrevious).Row If DLigTemp > DLig Then DLig = DLigTemp T_In_Extract = .Range("A" & NUM_LIGN_DEBUT & ":" & LETTRE_DERNIERE_COLONNE & DLig).Value Entete_Cols_Extr = .Range("A1:" & LETTRE_DERNIERE_COLONNE & "1").Value End With With Sheets(NOM_FEUIL_BDD) DLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row DLigTemp = .Columns(13).Find("*", , , , xlByColumns, xlPrevious).Row If DLigTemp > DLig Then DLig = DLigTemp T_In_Bdd = .Range("A" & NUM_LIGN_DEBUT & ":" & LETTRE_DERNIERE_COLONNE & DLig).Value Entete_Cols_Bdd = .Range("A1:" & LETTRE_DERNIERE_COLONNE & "1").Value End With 'stockage des éléments des colonnes B(2) et M(13) + début traitement For i = LBound(T_In_Extract) To UBound(T_In_Extract) T_In_Extract(i, 13) = "'" & T_In_Extract(i, 13) Dico_Extract(T_In_Extract(i, 2)) = T_In_Extract(i, 13) Next i For i = LBound(T_In_Bdd) To UBound(T_In_Bdd) T_In_Bdd(i, 13) = "'" & T_In_Bdd(i, 13) Dico_Bdd(T_In_Bdd(i, 2)) = T_In_Bdd(i, 13) 'début traitement If Dico_Extract.exists(T_In_Bdd(i, 2)) And Dico_Extract(T_In_Bdd(i, 2)) <> T_In_Bdd(i, 13) Then Else Cpt_Out_Bdd = Cpt_Out_Bdd + 1 ReDim Preserve T_Out_Bdd(1 To Nb_Col, 1 To i) For j = 1 To Nb_Col T_Out_Bdd(j, Cpt_Out_Bdd) = T_In_Bdd(i, j) Next j End If Next i 'fin traitement For i = LBound(T_In_Extract) To UBound(T_In_Extract) If Dico_Bdd.exists(T_In_Extract(i, 2)) And Dico_Bdd(T_In_Extract(i, 2)) = T_In_Extract(i, 13) Then Else Cpt_Out_Ectract = Cpt_Out_Ectract + 1 ReDim Preserve T_Out_Extract(1 To Nb_Col, 1 To i) For j = 1 To Nb_Col T_Out_Extract(j, Cpt_Out_Ectract) = T_In_Extract(i, j) Next j End If Next i 'restitution des données en feuilles "extract apres macro" et "bdd apres macro" With SheetRestiBdd .Cells.ClearContents .Range("A1").Resize(, UBound(Entete_Cols_Bdd, 2)) = Entete_Cols_Bdd .Range("A2").Resize(UBound(T_Out_Bdd, 2), UBound(T_Out_Bdd, 1)) = Application.Transpose(T_Out_Bdd) End With With SheetRestiExtr .Cells.ClearContents .Range("A1").Resize(, UBound(Entete_Cols_Extr, 2)) = Entete_Cols_Extr .Range("A2").Resize(UBound(T_Out_Extract, 2), UBound(T_Out_Extract, 1)) = Application.Transpose(T_Out_Extract) End With 'Ligne à supprimer après tests MsgBox Timer - t & " secondes" End Sub Function Feuil_Exist(strWbk As String, strWsh As String) As Boolean 'Gestionnaire d'erreur On Error Resume Next '"Test" Feuil_Exist = (Workbooks(strWbk).Sheets(strWsh).Name = strWsh) End Function
Merci pour tes réponses rapides pijaku.
Ton programme à mis 0.15625 sec pour s'exécuter
Et ton programme fonctionne bien dans le fichier que je t'ai transmis.
Cependant un fois dans mon fichier avec toutes mes valeurs, le fichier conserve toute les lignes dans Bdd apres macro et Extraction apres macro.
Ne trouves-tu pas ça étrange?
Ton programme à mis 0.15625 sec pour s'exécuter
Et ton programme fonctionne bien dans le fichier que je t'ai transmis.
Cependant un fois dans mon fichier avec toutes mes valeurs, le fichier conserve toute les lignes dans Bdd apres macro et Extraction apres macro.
Ne trouves-tu pas ça étrange?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 743
>
TintinU2
21 oct. 2015 à 12:39
21 oct. 2015 à 12:39
Ne trouves-tu pas ça étrange?
Non, ça m'arrive tous les jours de me planter ;-)
Problème de formats...
Ach ces dictionary !!!
Ach les formats de date!!!
Grrrr
Ce que l'on va faire.
1- créée une copie de ton classeur,
2- Supprime le contenu des colonnes A, C-L, N-P mais ne touche pas aux colonnes B et M!
3- transmet moi ce fichier.
Non, ça m'arrive tous les jours de me planter ;-)
Problème de formats...
Ach ces dictionary !!!
Ach les formats de date!!!
Grrrr
Ce que l'on va faire.
1- créée une copie de ton classeur,
2- Supprime le contenu des colonnes A, C-L, N-P mais ne touche pas aux colonnes B et M!
3- transmet moi ce fichier.
TintinU2
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
21 oct. 2015 à 13:28
21 oct. 2015 à 13:28
Je te fais ça pour demain
Merci encore pour ton aide
Merci encore pour ton aide
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 743
22 oct. 2015 à 10:45
22 oct. 2015 à 10:45
Bonjour,
Cependant un fois dans mon fichier avec toutes mes valeurs, le fichier conserve toute les lignes dans Bdd apres macro et Extraction apres macro.
Avec le fichier que tu m'as joint, le résultat après passage de macro donne :
Extraction : avant = 518 lignes / après = 49 lignes
Base de données : avant = 518 lignes / après = 512
Donc, je penses que les conditions énoncées dans le sujet de ce thread ne sont pas suffisante.
Comme le prouve ce Classeur
Cependant un fois dans mon fichier avec toutes mes valeurs, le fichier conserve toute les lignes dans Bdd apres macro et Extraction apres macro.
Avec le fichier que tu m'as joint, le résultat après passage de macro donne :
Extraction : avant = 518 lignes / après = 49 lignes
Base de données : avant = 518 lignes / après = 512
Donc, je penses que les conditions énoncées dans le sujet de ce thread ne sont pas suffisante.
Comme le prouve ce Classeur
Bonjour pijaku,
Merci pour ta réponse.
Je n'arrive pas à ouvrir le classeur en pièce jointe.
Les conditions sont bien respectée avec le premier tableau que j'ai transmis.
Cependant dans mon tableau final, avec ton programme, je retrouve:
Extraction : avant = 518 lignes / après = 518 lignes
Base de données : avant = 518 lignes / après = 518 lignes
J'ai l'impression qu'il fait juste un copier/coller.
Est-ce que le faite d'avoir des données dans les colonnes A, C-L, N-P, a une conséquence sur le programme?
Merci pour ta réponse.
Je n'arrive pas à ouvrir le classeur en pièce jointe.
Les conditions sont bien respectée avec le premier tableau que j'ai transmis.
Cependant dans mon tableau final, avec ton programme, je retrouve:
Extraction : avant = 518 lignes / après = 518 lignes
Base de données : avant = 518 lignes / après = 518 lignes
J'ai l'impression qu'il fait juste un copier/coller.
Est-ce que le faite d'avoir des données dans les colonnes A, C-L, N-P, a une conséquence sur le programme?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 743
>
TintinU2
22 oct. 2015 à 12:08
22 oct. 2015 à 12:08
Est-ce que le faite d'avoir des données dans les colonnes A, C-L, N-P, a une conséquence sur le programme?
Normalement non... Je ne traite que des colonnes B et M...
Bon, plus le choix, il me faut pour continuer le fichier original...
Normalement non... Je ne traite que des colonnes B et M...
Bon, plus le choix, il me faut pour continuer le fichier original...
TintinU2
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
22 oct. 2015 à 12:33
22 oct. 2015 à 12:33
Peux-tu remettre ton fichier accessible avant, car je ne peux pas le télécharger
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 743
>
TintinU2
22 oct. 2015 à 13:37
22 oct. 2015 à 13:37
Je ne comprends pas ta question. Tous les fichiers que j'ai placé dans cette discussion sont téléchargeables.
Non?
Non?
TintinU2
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
22 oct. 2015 à 13:58
22 oct. 2015 à 13:58
Je n'arrive pas à télécharger sur les deux liens:
-le n°1 : http://www.cjoint.com/c/EJvjQrLEowE
-le n°2 : http://www.cjoint.com/c/EJwiS7IysmE
-le n°1 : http://www.cjoint.com/c/EJvjQrLEowE
-le n°2 : http://www.cjoint.com/c/EJwiS7IysmE
TintinU2
Messages postés
79
Date d'inscription
lundi 26 octobre 2015
Statut
Membre
Dernière intervention
8 juillet 2016
5
26 oct. 2015 à 12:24
26 oct. 2015 à 12:24
Bonjour à tous,
Bonjour pijaku,
j'ai une dernière question.
Dans ma colonne M (avec les dates), je n'arrive pas a avoir un format correct après la macro.
Est-il possible d'avoir un format jj/mm/aaaa hh:mm sur toutes les lignes avec la macro
Merci d'avance
Bonjour pijaku,
j'ai une dernière question.
Dans ma colonne M (avec les dates), je n'arrive pas a avoir un format correct après la macro.
Est-il possible d'avoir un format jj/mm/aaaa hh:mm sur toutes les lignes avec la macro
Merci d'avance
21 oct. 2015 à 09:03
Merci pour ta réponse.
Voici un exemple de mon classeur avec les colonnes B et M
http://www.cjoint.com/c/EJvha0mDI7F
21 oct. 2015 à 09:38
Je penses que tu n'as pas des données qu'en colonne B et M. Ton tableau va de qu'elle colonne à qu'elle colonne?
Modifié par TintinU2 le 21/10/2015 à 09:47
Dans ma feuille Extraction, les lignes vont de 1 jusqu'à une valeur variable
Et dans ma feuille Base de Donnée, les lignes vont de 1 jusqu'à une valeur variable
21 oct. 2015 à 10:11
21 oct. 2015 à 11:05