Hadriennoel
Messages postés7Date d'inscriptionmercredi 12 mars 2008StatutMembreDernière intervention19 novembre 2010
-
21 sept. 2010 à 17:26
Hadriennoel
Messages postés7Date d'inscriptionmercredi 12 mars 2008StatutMembreDernière intervention19 novembre 2010
-
23 sept. 2010 à 14:08
bonjour !
Voici ce qui j'ai mis en place afin de trouver les lignes manquantes entre un classeur 1 et un classeur 2 en étant sur le classeur 1. Malheureusement il me bloque sur l'objet et mettant "objet requis" ...:( apres 2 heure de recherche et avoir donner ma langue au vba, j'en appelle a votre science ! Merci de votre aide ! (excel 2007)
Sub CopieManque()
Dim ligne As Integer
Worksheets("Répartition géographique pays").Select
Range("A2").Select
Set ligne = Worksheets("Répartition géographique pays").[A65000].End(xlUp).Row + 1
Do While ActiveCell <> ""
If IsError(Application.Match(ActiveCell, Worksheets("Répartition géographique pays").Range(Cells("A2"), Cells(e, 1)))) Then
Workbooks("repartition geographique.xlsx").Sheets("PEA Top Ten").Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy Worksheets("Répartition géographique pays").Cells(ligne, 1)
ligne = ligne + 1
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
foliv57
Messages postés420Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention15 juillet 20149 22 sept. 2010 à 19:00
J'ai tenté de comprendre votre code, mais vous conviendrez que jeté comme ca, sans indentation, sans balise de code, sans commentaire, celui-ci est absolument indigeste.
Je vous propose donc cette solution, dans le cas ou j'aurai réussi à déchiffrer correctement votre exemple :
Sub testlignemanquante()
Dim ligne As Long, l As Long
Dim e As Long
Dim FeuilleRepGeo As Worksheet, FeuilleTopTen As Worksheet
Dim SearchRange As Range
Set FeuilleRepGeo = Workbooks("base de données des fonds.xlsm").Worksheets("Répartition géographique pays")
Set FeuilleTopTen = Workbooks("repartition geographique.xlsx").Worksheets("PEA Top Ten")
'Recherche la première ligne vide de la feuille "Répartition géographique pays"
e = FeuilleRepGeo.Columns(1).Find(What:="", SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
'Défini la zone de recherche
Set SearchRange = FeuilleRepGeo.Range(FeuilleRepGeo.Cells(2, 1), FeuilleRepGeo.Cells(e, 1))
'Recherche la ligne ou commencer la copie dans de la feuille "Répartition géographique pays"
ligne = FeuilleRepGeo.Range("A65000").End(xlUp).Row + 1
l = 2
'Pour chaque ligne de la feuille "PEA Top Ten"
Do While (FeuilleTopTen.Cells(l, 1).Value <> "")
'Si la feuille "Répartition géographique pays" ne contient pas la valeur courante dans la colonne 1
If SearchRange.Find(What:=FeuilleTopTen.Cells(l, 1).Value, _
SearchOrder:=xlByRows, SearchDirection:=xlNext) Is Nothing Then
'Copie les valeurs de la feuille "PEA Top Ten"
FeuilleTopTen.Range(FeuilleTopTen.Cells(l, 1), FeuilleTopTen.Cells(l, 2)).Copy
'Colle les valeurs dans la feuille "Répartition géographique pays"
FeuilleRepGeo.Cells(ligne, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ligne = ligne + 1
End If
l = l + 1
Loop
End Sub
Evitez d'utiliser l'ActiveCell pour effectuer votre tâche. Une macro n'est pas faite pour imiter l'action de l'utilisateur sur le classeur.
Ceci évitera de voir le classeur clignoter inutilement dans tout les sens durant l'exécution et, par la même occasion, rendra plus facile la vie du programmeur qui devra retravailler sur votre code.
Evitez aussi au maximum la duplication des divers workbooks("MonClasseur") et WorkSheets("MaFeuille") car si un jour votre classeur ou votre feuille change de nom, c'est la catastrophe.
Hadriennoel
Messages postés7Date d'inscriptionmercredi 12 mars 2008StatutMembreDernière intervention19 novembre 2010 22 sept. 2010 à 09:19
Bonjour,
Merci pour tes informations, cela fonction en enlevant le Set ! J'ai un autre problème maintenant. Sur la ligne If Iserror, il me met erreur définie par l'application ou par l'objet par rapport à la cellule A2 je pense. Mais je ne comprends pas pourquoi sachant que je cherche justement a définir le Range d'application de la recherche sur le second classeur. Voici le code.
Sub testlignemanquante()
Dim ligne As Integer
Dim e As Integer
e = Workbooks("base de données des fonds.xlsm").Worksheets("Répartition géographique pays").Columns(1).Find("", , , , xlByRows, xlNext).Row
'Worksheets("Répartition géographique pays").Select
Workbooks("repartition geographique.xlsx").Worksheets(1).Activate
Range("A2").Select
ligne = Workbooks("base de données des fonds.xlsm").Worksheets("Répartition géographique pays").[A65000].End(xlUp).Row + 1
Do While ActiveCell <> ""
If IsError(Application.Match(ActiveCell, Workbooks("base de données des fonds.xlsm").Worksheets("Répartition géographique pays").Range(Cells("A2"), Cells(e, 1)))) Then
Workbooks("repartition geographique.xlsx").Sheets("PEA Top Ten").Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy Workbooks("base de données des fonds.xlsm").Worksheets("Répartition géographique pays").Cells(ligne, 1)
ligne = ligne + 1
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Hadriennoel
Messages postés7Date d'inscriptionmercredi 12 mars 2008StatutMembreDernière intervention19 novembre 2010 23 sept. 2010 à 14:08
Merci beaucoup pour ta clairvoyance ! Cela fonctionne parfaitement et je ne peux que te félicité!!! Je tiens compte de ta remarque concernant les indications à mettre en place afin de rendre le code plus accesible aux autres pour les prochaines fois !!!