Comparaison d'onglet - VB/VBA/VBS - Programmation
Marsh Posté le 15-01-2013 à 16:18:31
Le plus simple pour ça me paraît être de faire un VLOOKUP/RECHERCHEV (tuto: http://www.commentcamarche.net/faq [...] recherchev)
Ensuite tu l'imbriques dans un IF dans ta formule.
Si tu veux la même chose en VBA fais signe.
Marsh Posté le 15-01-2013 à 21:20:38
Merci sh_kyra mais je préférerais en vba. Si tu pouvais me donner un coup de main ce serait sympa.
Marsh Posté le 15-01-2013 à 21:24:42
Je souhaite du vba car j'ai beaucoup de lignes à comparer et elles varient d'un jour à l'autre. Je souhaite que cette tâche soit automatisée.
Marsh Posté le 16-01-2013 à 10:01:19
Bonjour,
Tu a plusieurs problèmes dans ton code :
Dans ton premier test IF, le nom de la feuille, tu a mis Import A au lieu de Import 1, met également .Value après le range pour comparer les valeurs (.Range("A" & a).Value et .Range("A" & b).Value )
Lorsque tu rencontre une occurence, tu met reponse à True mais tu ne le remet jamais à False. Tu devrais faire ça dans ton If Reponse=True, une fois que tu a recopié la ligne.
Ta vDerLigne doit etre ton .row + 1, sinon tu va remplacer la dernière ligne
Une fois ces petits élements corrigés ça devrait fonctionner
Marsh Posté le 16-01-2013 à 11:12:34
Ça devrait faire ce que tu veux faire - si j'ai bien compris:
Code :
|
Apprend à variabiliser, c'est beaucoup plus clair à lire et bien plus facile à maintenir par la suite...
Gaffe en faisant ton copié collé, il ajoute des espaces après les parenthèses
Marsh Posté le 16-01-2013 à 14:55:53
sh_kyra a écrit : Ça devrait faire ce que tu veux faire - si j'ai bien compris:
|
Bonjour sh_kyra,
Merci pour cette réponse mais le code ne fonctionne pas comme je le souhaiterais.
Je vais essayer de m'exprimer d'une manière plus compréhensible et réunir des données (Import 1,2,3,4 etc... dans un seul onlet) pour que ce soit plus simple.
Je possède donc un fichier avec un onglet Import 1 (je l'appelerai I1), un onglet Import source (je l'appelerai IS)et un onglet Résultat (je l'appelerai IR)
Composition de I1:
A B C D
N° OD Heure Départ Heure Arrivée
Composition de IS:
A B C D E F G H I J K L
Marche Dep_D tHr Dep_Pt Arr_Pt Arr_D tHr Journée PS_Dt Hr Agent Gestion
Je souhaite chaque valeur de la colonne A de I1 avec chaque valeur de la collone A de IS.
Lorsqu'une valeur commune est trouvée je souhaite la copier la ligne correspondante du fichier IS pour la coller dans la première ligne non vide (à partir de la colonne A) de IR.
Est-ce plus clair comme ceci ?
Merci encore pour vos retours
Marsh Posté le 16-01-2013 à 16:02:40
Ben si j'ai bien compris (mais tes explications sont un peu confuses) la seule différence avec ce que je t'ai donné se situe ici :
21. Set foundRange = Ws1.Cells(10, 1).Offset(a).EntireRow
à remplacer donc par
21. Set foundRange = Ws2.Cells(1, 1).Offset(b).EntireRow
Ce que je t'ai donné compare bien I1 avec IS sur la première colonne, la seule différence c'est que je copiais la ligne de I1 et pas de IS dans IR.
Et c'est ça dans ton ancien code qui m'a induit en erreur:
Citation :
|
Merci sinon de donner le fichier
Marsh Posté le 16-01-2013 à 21:42:10
Une autre méthode certainement plus rapide est d'utiliser une seule boucle combinée à la méthode Find,
surtout s'il y a beaucoup de lignes à vérifier …
Et bien sûr de désactiver le rafraîchissement de l'écran durant le processus
et d'ôter tous les .Select inutiles comme dans le code de sh_kyra.
Je reste "en veille" en cas de besoin …
Marsh Posté le 14-01-2013 à 13:49:15
Bonjour,
Je souhaiterais créer un tache automatisée pour comparer la première colonne des onglets "fichiers (1,2,3 etc...)" à la première colonne de l'onglet "source".
Pour être un peu plus clair:
Si une valeur de la colonne A de l'onglet source = une valeur de l'onglet fichier 1 ou 2 ou 3 etc...
Alors copier la ligne correspondante à cette dernière dans l'onglet "récapitulatif"
Et ainsi de suite pour toutes les valeurs de l'onglet source.
Auriez-vous des solutions ?
Merci d'avance pour vos réponses.
J'ai testé ceci mais cela ne fonctionne pas :
Dim a As Integer
Dim b As Integer
Dim vDerligne As Integer
Dim reponse As Integer
For a = Sheets("Import 1" ).Range("A65000" ).End(xlUp).Row To 10 Step -1
For b = Sheets("Import 2" ).Range("A65000" ).End(xlUp).Row To 1 Step -1
If Sheets("Import A" ).Range("A" & a) = Sheets("Import 2" ).Range("A" & b) Then reponse = True
Next b
If reponse = True Then
Sheets("Import 1" ).Select
ActiveSheet.Rows(a).Select
Selection.copy
Sheets("Résultats" ).Select
vDerligne = Sheets("Résultats" ).Range("A65000" ).End(xlUp).Row
Range("A" & vDerligne).Select
ActiveSheet.Paste
End If
Next a
End Sub
Cordialement
Message édité par vallou94 le 14-01-2013 à 15:15:16