Problème d'objet requis [Résolu]

Hadriennoel 7 Messages postés mercredi 12 mars 2008Date d'inscription 19 novembre 2010 Dernière intervention - 21 sept. 2010 à 17:26 - Dernière réponse : Hadriennoel 7 Messages postés mercredi 12 mars 2008Date d'inscription 19 novembre 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 22 sept. 2010 à 19:00
3
Merci
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.

Merci foliv57 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de foliv57
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 21 sept. 2010 à 19:58
0
Merci
Bonjour,

On ne fait pas un Set d'un Integer

ligne = Worksheets("Répartition géographique pays").[A65000].End(xlUp).Row + 1
Commenter la réponse de foliv57
Hadriennoel 7 Messages postés mercredi 12 mars 2008Date d'inscription 19 novembre 2010 Dernière intervention - 22 sept. 2010 à 09:19
0
Merci
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


Encore merci d'avance pour votre aide !!
Commenter la réponse de Hadriennoel
Hadriennoel 7 Messages postés mercredi 12 mars 2008Date d'inscription 19 novembre 2010 Dernière intervention - 23 sept. 2010 à 14:08
0
Merci
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 !!!

Merci encore !

Cordialement
Commenter la réponse de Hadriennoel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.