Excel 2007 VBA : Macro non exhaustive ?
Résolu/Fermé
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
-
6 sept. 2010 à 15:55
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 7 sept. 2010 à 17:58
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 7 sept. 2010 à 17:58
A voir également:
- Excel 2007 VBA : Macro non exhaustive ?
- Liste déroulante excel - Guide
- Save as pdf office 2007 - Télécharger - Bureautique
- Word et excel gratuit - Guide
- Si et excel - Guide
- Déplacer une colonne excel - Guide
5 réponses
Gord21
Messages postés
918
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
289
6 sept. 2010 à 23:48
6 sept. 2010 à 23:48
Bonsoir,
Dans ta macro, la valeur BP de la feuille 2 n'est recopiée dans BP de la feuille 1 que si les BK sont identiques : est-ce vraiment le cas ? Attention aux espaces ("toto" est différent de "toto " et de " toto")
@+
Dans ta macro, la valeur BP de la feuille 2 n'est recopiée dans BP de la feuille 1 que si les BK sont identiques : est-ce vraiment le cas ? Attention aux espaces ("toto" est différent de "toto " et de " toto")
@+
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
7 sept. 2010 à 09:25
7 sept. 2010 à 09:25
Hello et merci pour ta réponse.
Concernant les valeurs de la "clé" de recopie, elle sont extraites tous les jours depuis une base de données. j'avais regardé si personne n'y avait inscrit un espace.. mais non
Concernant les valeurs de la "clé" de recopie, elle sont extraites tous les jours depuis une base de données. j'avais regardé si personne n'y avait inscrit un espace.. mais non
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 258
7 sept. 2010 à 10:21
7 sept. 2010 à 10:21
Bonjour,
Il faudrait un fichier exemple...
Dépose-le sur cijoint.fr et colle ici le lien fourni
eric
Il faudrait un fichier exemple...
Dépose-le sur cijoint.fr et colle ici le lien fourni
eric
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
7 sept. 2010 à 11:32
7 sept. 2010 à 11:32
Bonjour Éric,
J'ai préparé un petit exemple ici : http://www.cijoint.fr/cjlink.php?file=cj201009/cij0r9mWF2.zip
J'ai préparé un petit exemple ici : http://www.cijoint.fr/cjlink.php?file=cj201009/cij0r9mWF2.zip
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 258
Modifié par eriiic le 7/09/2010 à 13:20
Modifié par eriiic le 7/09/2010 à 13:20
Re,
Et si tu donnais les références des cellules qui sont théoriquement égales et qui ne sont pas détectées ?
Tu vois je n'ai pas envie de contrôler un par un les milliers de tests effectués...
Accessoirement :
1) lorsque tu écris Dim derlig3, derlig4, derlig5, derlig6, derlig7, derlig8, derlig9, derlig10, derlig11, derlig12, derlig13, derlig14 As Long seule derlig14 est Long, les autres sont Variants
Il faut écrire Dim derlig3 as long, derlig4 as long, ...
2) plutôt que de faire 2 boucles imbriquées pour rechercher une valeur tu peux, à la place de la boucle intérieure, utiliser la méthode .find (voir aide excel vba). Ca sera beaucoup plus rapide (mais à faire plus tard si tu le désires, restons sur la question initiale)
eric
Et si tu donnais les références des cellules qui sont théoriquement égales et qui ne sont pas détectées ?
Tu vois je n'ai pas envie de contrôler un par un les milliers de tests effectués...
Accessoirement :
1) lorsque tu écris Dim derlig3, derlig4, derlig5, derlig6, derlig7, derlig8, derlig9, derlig10, derlig11, derlig12, derlig13, derlig14 As Long seule derlig14 est Long, les autres sont Variants
Il faut écrire Dim derlig3 as long, derlig4 as long, ...
2) plutôt que de faire 2 boucles imbriquées pour rechercher une valeur tu peux, à la place de la boucle intérieure, utiliser la méthode .find (voir aide excel vba). Ca sera beaucoup plus rapide (mais à faire plus tard si tu le désires, restons sur la question initiale)
eric
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
Modifié par Eaheru le 7/09/2010 à 14:50
Modifié par Eaheru le 7/09/2010 à 14:50
Arf, je pensais que la déclaration des variables tel que je l'avais faite était correcte :( merci de cette précision.
Pour les lignes ou ca ne fonctionne pas le fichier se renouvelant chaque jour, je n'en dispose plus pour le moment (les commentaires ont étés perdus). Et je comprends bien que les milliers de tests ne t'emballent pas :)
Pour les lignes ou ca ne fonctionne pas le fichier se renouvelant chaque jour, je n'en dispose plus pour le moment (les commentaires ont étés perdus). Et je comprends bien que les milliers de tests ne t'emballent pas :)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
Modifié par Polux31 le 7/09/2010 à 13:27
Modifié par Polux31 le 7/09/2010 à 13:27
Bonjour tout le monde.
Tout à fait d'accord avec Eric, d'autre part pour faire 5 fois la même boucle ? On gagnerai du temps en faisant toutes les opérations dans la même boucle. De plus, les variables globales doivent déclarées tout en haut du module et non au milieu des procédures:
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Tout à fait d'accord avec Eric, d'autre part pour faire 5 fois la même boucle ? On gagnerai du temps en faisant toutes les opérations dans la même boucle. De plus, les variables globales doivent déclarées tout en haut du module et non au milieu des procédures:
Option Explicit Private Const fich3 = "D:\tmp\save\fichier1.xls" Private Const fich4 = "D:\tmp\save\fichier2.xls" Sub Search() SearchComments SaveComments End Sub Sub SearchComments() Dim wk3 As Workbook Dim wk4 As Workbook Dim ws3 As Worksheet Dim ws4 As Worksheet Dim derlig3 As Long Dim derlig4 As Long Dim cel3 As Range Dim cel4 As Range Set wk3 = Workbooks.Open(fich3) Set wk4 = Workbooks.Open(fich4) Set ws4 = wk4.Worksheets(1) derlig4 = ws4.Range("BK65536").End(xlUp).Row Set ws3 = wk3.Worksheets(1) derlig3 = ws3.Range("BK65536").End(xlUp).Row For Each cel3 In ws3.Range("BK2:BK" & derlig3) For Each cel4 In ws4.Range("BK2:BK" & derlig4) If cel3.Value = cel4.Value Then ws3.Range("BO" & cel3.Row).Value = ws4.Range("BO" & cel4.Row).Value ws3.Range("BP" & cel3.Row).Value = ws4.Range("BP" & cel3.Row).Value ws3.Range("BQ" & cel3.Row).Value = ws4.Range("BQ" & cel3.Row).Value ws3.Range("BR" & cel3.Row).Value = ws4.Range("BR" & cel3.Row).Value ws3.Range("BT" & cel3.Row).Value = ws4.Range("BT" & cel3.Row).Value End If Next cel4 Next cel3 Set wk4 = Nothing Set wk3 = Nothing Set ws4 = Nothing Set ws3 = Nothing End Sub
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
Modifié par Eaheru le 7/09/2010 à 14:16
Modifié par Eaheru le 7/09/2010 à 14:16
Merci a vous deux !
Effectivement mes connaissances en VB sont très récentes et j'apprends sur le tas.
J'avais bien essayé de faire effectuer les 5 recherches sans parvenir à un résultat.
Au final j'ai donc opté pour 5 boucle successives (sachant que le temps de traitement serait important).
Mais bon, le résultat n'était pas probant non plus.
Polux,
Je vais tenter d'adapter ta routine dans mon flux, merci beaucoup de ton aide.
Eric,
Je vais effectuer aussi la recherche sur la fonction "find" ca pourra m'être utile pour le futur :)
Merci de votre disponibilité
Effectivement mes connaissances en VB sont très récentes et j'apprends sur le tas.
J'avais bien essayé de faire effectuer les 5 recherches sans parvenir à un résultat.
Au final j'ai donc opté pour 5 boucle successives (sachant que le temps de traitement serait important).
Mais bon, le résultat n'était pas probant non plus.
Polux,
Je vais tenter d'adapter ta routine dans mon flux, merci beaucoup de ton aide.
Eric,
Je vais effectuer aussi la recherche sur la fonction "find" ca pourra m'être utile pour le futur :)
Merci de votre disponibilité
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
7 sept. 2010 à 15:20
7 sept. 2010 à 15:20
La macro tel qu'écrite par Polux a fonctionné parfaitement !
J'ai juste corrigé la petite erreur de copié/collé tel que ci dessous :
ws3.Range("BO" & cel3.Row).Value = ws4.Range("BO" & cel4.Row).Value
ws3.Range("BP" & cel3.Row).Value = ws4.Range("BP" & cel4.Row).Value
ws3.Range("BQ" & cel3.Row).Value = ws4.Range("BQ" & cel4.Row).Value
ws3.Range("BR" & cel3.Row).Value = ws4.Range("BR" & cel4.Row).Value
ws3.Range("BT" & cel3.Row).Value = ws4.Range("BT" & cel4.Row).Value
La première ligne était ok
J'ai juste corrigé la petite erreur de copié/collé tel que ci dessous :
ws3.Range("BO" & cel3.Row).Value = ws4.Range("BO" & cel4.Row).Value
ws3.Range("BP" & cel3.Row).Value = ws4.Range("BP" & cel4.Row).Value
ws3.Range("BQ" & cel3.Row).Value = ws4.Range("BQ" & cel4.Row).Value
ws3.Range("BR" & cel3.Row).Value = ws4.Range("BR" & cel4.Row).Value
ws3.Range("BT" & cel3.Row).Value = ws4.Range("BT" & cel4.Row).Value
La première ligne était ok
Gord21
Messages postés
918
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
289
7 sept. 2010 à 17:53
7 sept. 2010 à 17:53
Bonjour,
Juste en complément de ce qui a été dit, pour gagner en rapidité d'execution, tu peux également désactiver la mise à jour de l'affichage le temps du calcul puis le réactiver :
@+
Juste en complément de ce qui a été dit, pour gagner en rapidité d'execution, tu peux également désactiver la mise à jour de l'affichage le temps du calcul puis le réactiver :
Application.ScreenUpdating=Falseen début de procédure puis
Application.ScreenUpdating=Truejuste avant le End Sub.
@+
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
7 sept. 2010 à 17:58
7 sept. 2010 à 17:58
Bonne idée, merci :)