copier une plage de données sous conditions dans un classeur fermé

yvann

XLDnaute Nouveau
Bonjour à tous!

Premièrement merci à tout ceux qui m'ont aidé. Ci-joint, vous pourrez voir à quoi je suis parvenu grâce à vous: une macro ("importer") qui va chercher une plage de données ("F4338:F4697") dans un classeur fermé ("BLABLA.xls").
Pour la tester, il suffit que vous les enregistriez au même endroit et que vous appuyez sur le bouton "importer et mettre en forme". (situé vers E33 pour ceux qui auraient du mal à trouver :) )

Mon souci est le suivant: je ne voudrais pas fixer cette plage à copier dans l'absolu mais dire à la macro de prendre comme plage sur la colonne F toutes les cellules qui répondent au critère suivant: il faut qu'il y ait "03" dans la colonne B ET "M" dans la colonne C ET "P" dans la colonne D.


Je suis dessus depuis deux jours et j'avoue que je n'ai plus de ressource..
Si vous pouviez modifier le code pour que ça renvoie le même résultat mais que à aucun moment on est "F4338:F4697" , ça serait tout simplement génial.
Ce qui serait encore plus kiffant c'est qu'on laisse le choix à l'utilisateur pour les 3 critères mais ça c'est secondaire...

Merci d'avance pour vos réponses!

Yvann
 

yvann

XLDnaute Nouveau
Re : copier une plage de données sous conditions dans un classeur fermé

Oups les pièces jointes....
Mais j'ai été obligé de réduire la taille: faut changer "F4338:F4697" dans la macro "importer" pour la tester et faut prendre
d'autres critères que 03 et M et P car il n'y a plus ce cas de figure...
Désolé
 

Pièces jointes

  • mise en forme bis.zip
    27.2 KB · Affichages: 84
  • BLABLA.xls
    40 KB · Affichages: 130
  • BLABLA.xls
    40 KB · Affichages: 127
  • BLABLA.xls
    40 KB · Affichages: 127

yvann

XLDnaute Nouveau
Re : copier une plage de données sous conditions dans un classeur fermé

En fait pour tester la macro, je vous conseille de reconstituer le fichier BLABLA que j'ai été obligé d'élaguer en rajoutant des valeurs dans la colonne F jusqu'à la ligne 4700.
Sinon, j'éspère que j'ai exprimé mon souci clairement. Merci encore pour votre aide j'en ai vraiment besoin là.
 

yvann

XLDnaute Nouveau
Re : copier une plage de données sous conditions dans un classeur fermé

Voici à quel code j’ai pensé mais je n’arrive pas à l’adapter comme il faut et à l’insérer au bon endroit :

Il s’agirait grâce à deux compteurs de fixer le numéro de la première ligne où apparaît notre condition (i), puis de la dernière (j)et de nommer la plage [« F »&i : « F »&j] :


Do loop i=i+1
Until application.workbooks(« sourcefile »).worksheets(« sourcesheet »).range(« a »&i).value = 03 and range(« b »&i).value =M and range(c&i)=P


i=j



While range(a&j).value =03 and range(b&j)=M and range (c&i)=P DO j=j+1 loop



Set sourcerange=[« F »&i : « F »&j]




C’est dans le module 1 de mise en forme qu’il faudrait l’adapter, dans la public sub GetData mais je n’y arrive pas… Comme je suis connecté, il ne reconnaît pas les objets classiques comme aplication..
 

yvann

XLDnaute Nouveau
Re : copier une plage de données sous conditions dans un classeur fermé

il s’agit d’un tri , et une fois que les données triées, on prend comme plage (SourceRange) les cellules dans la colonne F qui correspondent.

Do

i = i + 1

Loop Until Cells(i, 2) = "03" And Cells(i, 3) = "M" And Cells(i, 4) = "P" trouve le numéro de la première ligne répondant au critères



j = i la plage de cellules répondant aux critères est en un seul bloc, donc on enchaîne pour trouver le numéro de la dernière ligne



Do While Cells(j, 2) = "03" And Cells(j, 3) = "M" And Cells(j, 4) = "P" trouve le numéro de la dernière ligne correspondant aux critères


j = j + 1



Loop



Set SourceRange= « F&i :F&j » définit la plage de cellules à copier


Le problème c’est que pour l’instant j’ai des messages d’erreurs.. Je bloque vraiment.

Le principal c’est de trouver comment adapter le code ci-dessus et où le mettre pour que ça marche.







Voilà ce que j’ai découvert :



With Range(SourceRange)
i = 5
Do
i = i + 1
Loop Until Range("C" & i).Value = M And Range("D" & i).Value = P
End With
MsgBox ("i=" & i)



Quand on insère cette boucle après la connexion mais avant de copier des trucs, elle marche et renvoie un i intéressant (avant j'avais des messages d'erreurs), le problème c’est que le format de la colonne B dans le fichier BLABLA est NumberFormat = "00" . Avec ce format, la méthode range échoue si tu rajoutes
Range("b"& i).value = "03" And



Auriez-vous une solution pour ce sous-problème ?



Sinon, comment dans ce cas là stocker la valeur i quelque part et faire démarrer j avec cette valeur ??



Et quand on aura tout ça, comment ça s’écrit une plage avec un compteur dedans ? comme ça : [« f »& i : « f »& j] ??
 

Discussions similaires

Statistiques des forums

Discussions
312 380
Messages
2 087 820
Membres
103 665
dernier inscrit
gjoanou