![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité régulier
![]() Date d'inscription: juin 2006
Messages: 11
|
Bonjour à tous,
je developpe une petite macro pour m'aider dans la comparaison de fichiers. -j'ai un premier fichier avec une feuille de tous les articles de mon client: -Fichier : "CHU.xls" dans la macro c'est la variable nom_classeur1 -feuille : "AO0634026 accepté" dans la macro c'est la variable Feuille -j'ai un second fichier avec 2 feuilles : -Fichier : "Tous les articles supprimés.xls" -feuille 1 : "Art Supprimés" -feuille 2 : "Art Bloqués" Ma macro va comparer : -la feuille "AO0634026 accepté" du fichier "CHU.xls" à la feuille 1 : "Art Supprimés" du fichier "Tous les articles supprimés.xls" -la feuille "AO0634026 accepté" du fichier "CHU.xls" à la feuille 2 : "Art Bloqués" du fichier "Tous les articles supprimés.xls" si la macro trouve qu'un article du fichier "CHU.xls" est présent dans une des feuilles "Art Supprimés" ou "Art Bloqués", elle copie la ligne dans un fichier "produit CHU accepté-supprimé.xls" ma macro est défaillante, donc si quelqu'un peut me situer où se trouve le problème, je suis preneur, car je perds du temps, sur un truc con en plus j'en suis sûr! voilà mon Code : Merci de jeter un coup d'oeil si vous avez le temps Sofiane Code :
Sub comparer_2_fichiers() Dim nom_classeur1 As String Dim Feuille As String Dim a, l, m, k, i, j, z As Integer nom_classeur1 = InputBox("tapez le nom du classeur ou se trouvent les appels d'offres") Feuille = InputBox("tapez le nom de la feuille a traiter") Workbooks.Add ActiveWorkbook.SaveAs "C:\Documents and Settings\JMDUPOUX\Bureau\produit CHU accepté-supprimé.xls" Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Activate 'compte le nombre de ligne jusqu'a cellule vide l = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 1er fichier Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Supprimés").Activate 'compte le nombre de ligne jusqu'a cellule vide m = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 2nd fichier et la 1ere feuille k = 1 ' variable ligne pour le fichier produit CHU accepté-supprimé.xls For i = 2 To l Step 1 'boucle du 1er fichier "CHU.xls", pour comparer les articles de mon client For j = 2 To m Step 1 'boucle du 2er fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls", pour trouver les articles si des articles de mon client sont supprimés ou bloqués If Workbooks(nom_classeur1 & ".xls").Worksheets("Feuille").Cells(i, 3) = Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Supprimés").Cells(j, 1) Then Workbooks(nom_classeur1 & ".xls").Worksheets("Feuille").Row(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuil1").Row(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" k = k + 1 End If If j = m Then ' une fois que la macro est venue à bout du la feuille "Art Supprimés" du fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls" ' elle s'attaque à la feuille "Art Bloqués" du fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls" Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Bloqués").Activate 'compte le nombre de ligne jusqu'a cellule vide z = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 2nd fichier et la 2nd feuille For a = 2 To z Step 1 If Workbooks(nom_classeur1 & ".xls").Worksheets("Feuille").Cells(i, 3) = Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Bloqués").Cells(a, 1) Then Workbooks(nom_classeur1 & ".xls").Worksheets("Feuille").Row(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuille").Row(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" k = k + 1 End If Next a End If Next j Next i End Sub |
|
|
|
|
|
#2 (permalink) |
|
Membre chevronné
![]() Date d'inscription: janvier 2007
Localisation: nantua
Messages: 604
|
la macro est défaillante il serait interressant de savoir ou elle défaille
est-ce à l'ouverture ou à la lecture des fichiers ? si c'est ceci évite tous les caractères exotiques dans les noms é è ë ê et remplace les espaces par des underscore VBA est Tâtillons de plus d'un PC à l'autre certain paramètres influent sur les noms un PC prendra "mon_fichier.xls" l'autre à la lecture de diras qu'il ne trouve pas "mon_fichier.xls.xls" ceci est une route à suivre je travaille en aveugle (pas d'excel sous la main) à proscrire aussi les espaces dans les noms de feuilles
__________________
Cordialement Daranc Dernière modification par Daranc ; 26/08/2008 à 15h02 Motif: correction orthographe |
|
|
|
|
|
#3 (permalink) |
|
Invité régulier
![]() Date d'inscription: juin 2006
Messages: 11
|
oui Daranc, c'est vrai j'ai completement zapper de laisser les accents et caractères speciaux! je vais changer ça! mais la macro se plante dès la première conditon au niveau du if de la seconde boucle for!
merci de ton com |
|
|
|
|
|
#4 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: août 2007
Localisation: Lyon
Âge: 27
Messages: 74
|
bonjour,
tu as laisser les guillemets dans : Code :
If Workbooks(nom_classeur1 & ".xls").Worksheets("Feuille").Cells(i, 3) = Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Supprimés").Cells(j, 1) Then |
|
|
|
|
|
#5 (permalink) |
|
Invité régulier
![]() Date d'inscription: juin 2006
Messages: 11
|
merci pour ta reponse!! je savais que c'etait un truc bête !
par contre j'ai fait mes tests! et à ce niveau là ça bloque! la macro à trouver un article supprimé, elle doit copier la ligne du fichier puis la coller dans la feuille d'un autre fichier! Code :
Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Row(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuil1").Row(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" Merci Sofiane |
|
|
|
|
|
#7 (permalink) |
![]() Date d'inscription: février 2008
Localisation: Bxl
Âge: 45
Messages: 2 667
|
Bonjour,
Petite remarque concernant la déclaration des variables. Pour chaque variable, le type doit être défini sinon la variable prend par défaut le type Variant et bouffe de la mémoire inutilement. Code :
Dim a, l, m, k, i, j, z As Integer Code :
Dim a As Integer, l As Integer, m As Integer, k As Integer, i As Integer, j As Integer, z As Integer .
__________________
LES FAQ OFFICE - LES COURS OFFICE - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA Prenez quelques secondes pour lire ceci : Aide sur l'utilisation des boutons du forum Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois) |
|
|
|
|
|
#8 (permalink) |
|
Invité régulier
![]() Date d'inscription: juin 2006
Messages: 11
|
ok,
le paste n'a pas marché mais en mettant la ligne comme ça : Code :
Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Rows(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuille").Activate Rows(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" après j'ai modifié les variables comme ceci : Code :
Dim a As Integer, l As Integer, m As Integer, k As Integer, i As Integer, j As Integer, z As Integer tout marche correctement, j'ai rajouté aussi des exit for pour que ma boucle sorte si elle à trouvée ce qu'elle voulais une première fois mon code final: Code :
Option Explicit Sub comparer_2_fichiers() Dim nom_classeur1 As String Dim Feuille As String Dim a As Integer, l As Integer, m As Integer, k As Integer, i As Integer, j As Integer, z As Integer nom_classeur1 = InputBox("tapez le nom du classeur ou se trouvent les appels d'offres") If nom_classeur1 = "" Then Exit Sub End If Feuille = InputBox("tapez le nom de la feuille a traiter") If Feuille = "" Then Exit Sub End If Workbooks.Add ActiveWorkbook.SaveAs "C:\Documents and Settings\JMDUPOUX\Bureau\produit CHU accepté-supprimé.xls" Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Activate 'compte le nombre de ligne jusqu'a cellule vide l = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 1er fichier Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Supprimés").Activate 'compte le nombre de ligne jusqu'a cellule vide m = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 2nd fichier et la 1ere feuille k = 1 ' variable ligne pour le fichier produit CHU accepté-supprimé.xls For i = 2 To l Step 1 'boucle du 1er fichier "CHU.xls", pour comparer les articles de mon client For j = 2 To m Step 1 'boucle du 2er fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls", pour trouver les articles si des articles de mon client sont supprimés ou bloqués If Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Cells(i, 3) = Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Supprimés").Cells(j, 1) Then Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Rows(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuil1").Activate Rows(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" k = k + 1 Exit For 'on sort de la boucle des qu'on a trouvé End If If j = m Then ' une fois que la macro est venue à bout du la feuille "Art Supprimés" du fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls" ' elle s'attaque à la feuille "Art Bloqués" du fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls" Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Bloqués").Activate 'compte le nombre de ligne jusqu'a cellule vide z = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 2nd fichier et la 2nd feuille For a = 2 To z Step 1 If Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Cells(i, 3) = Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Bloqués").Cells(a, 1) Then Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Rows(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuil1").Activate Rows(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" k = k + 1 Exit For 'on sort de la boucle des qu'on a trouvé End If Next a End If Next j Next i End Sub dès que la première feuille de mon premier fichier est traitée -Fichier : "CHU.xls" dans la macro c'est la variable nom_classeur1 -feuille : "AO0634026 accepté" dans la macro c'est la variable Feuille les données trouvées sont bien copiés sur mon nouveau fichier. je voudrais que ma macro s'attaque aux autres feuilles du fichier -CHU.xls en gardant ma variable k, pour pouvoir copier à la suite de mon nouveau fichier (produit CHU accepté-supprimé.xls) les autres données trouvées sur les autres feuilles de mon 1er fichier (CHU.xls). je test de mon côté toujours, Merci à tous |
|
|
|
|
|
#9 (permalink) |
|
Invité régulier
![]() Date d'inscription: juin 2006
Messages: 11
|
c'est bon j'ai reussi à faire ce que je voulais faire!!
voici le code pour ceux qui ont suivi : Code :
Option Explicit Sub comparer_2_fichiers() Dim nom_classeur1 As String Dim Feuille As String, reponse As String Dim a As Integer, l As Integer, m As Integer, k As Integer, i As Integer, j As Integer, z As Integer, termine_macro As Integer nom_classeur1 = InputBox("tapez le nom du classeur ou se trouvent les appels d'offres") If nom_classeur1 = "" Then Exit Sub End If Workbooks.Add ActiveWorkbook.SaveAs "C:\Documents and Settings\JMDUPOUX\Bureau\produit CHU accepté-supprimé.xls" Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuil1").Activate 'compte le nombre de ligne jusqu'a cellule vide k = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 2nd fichier et la 1ere feuille Do 'boucle pour comparer toutes les feuilles Feuille = InputBox("tapez le nom de la feuille a traiter") If Feuille = "" Then Exit Sub End If Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Activate 'compte le nombre de ligne jusqu'a cellule vide l = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 1er fichier Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Supprimés").Activate 'compte le nombre de ligne jusqu'a cellule vide m = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 2nd fichier et la 1ere feuille 'k = 1 ' variable ligne pour le fichier produit CHU accepté-supprimé.xls For i = 2 To l Step 1 'boucle du 1er fichier "CHU.xls", pour comparer les articles de mon client For j = 2 To m Step 1 'boucle du 2er fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls", pour trouver les articles si des articles de mon client sont supprimés ou bloqués If Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Cells(i, 3) = Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Supprimés").Cells(j, 1) Then Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Rows(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuil1").Activate Rows(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" k = k + 1 Exit For 'on sort de la boucle des qu'on a trouvé End If If j = m Then ' une fois que la macro est venue à bout du la feuille "Art Supprimés" du fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls" ' elle s'attaque à la feuille "Art Bloqués" du fichier "TOUS LES ARTICLES SUPPRIMES dernier.xls" Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Bloqués").Activate 'compte le nombre de ligne jusqu'a cellule vide z = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 'pour le 2nd fichier et la 2nd feuille For a = 2 To z Step 1 If Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Cells(i, 3) = Workbooks("TOUS LES ARTICLES SUPPRIMES dernier.xls").Worksheets("Art Bloqués").Cells(a, 1) Then Workbooks(nom_classeur1 & ".xls").Worksheets(Feuille).Rows(i).Copy ' si article trouvé, la macro copie la ligne Workbooks("produit CHU accepté-supprimé.xls").Worksheets("Feuil1").Activate Rows(k).PasteSpecial ' et colle la ligne dans la feuille 1 du fichier "produit CHU accepté-supprimé.xls" k = k + 1 Exit For 'on sort de la boucle des qu'on a trouvé End If Next a End If Next j Next i termine_macro = MsgBox("Avez vous une autre feuille à traiter", vbYesNo + vbCritical + vbDefaultButton2, "Titre de la boîte") If termine_macro = vbYes Then reponse = "OUI" Else reponse = "NON" End If Loop Until reponse = "NON" End Sub Sofiane |
|
|
|
![]() |
![]() |
||
comparaison 1 fichier avec 1 feuille à 1 fichier avec 2 feuilles
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|