Salut
Ah, enfin quelqu'un qui a compris qu'un peu d'anonymisation ne coûtait pas grand chose mais faisait passer son auteur pour un peu moins bête que la moyenne. Merci.
Code:
Set wb = Workbooks.Open("C:\........\ogone.xls")
Set ws = wb.Worksheets("Ogone_Fev")
Set wb = Workbooks.Open("C:\................\commande.xls")
Set ws = wb.Worksheets("Encaissement_Ventes")
:/
Et si je te proposais :
Et que je te demande l'intérêt de la première ligne...
Comme ça, m'enfin !
Code:
Dim wb_ogone As Workbook
Dim ws_ogone As Worksheet
Set wb_ogone = Workbooks.Open("C:\........\ogone.xls")
Set ws_ogone = wb.Worksheets("Ogone_Fev")
Dim wb_cmd As Workbook
Dim ws_cmd_encaiss As Worksheet
Set wb_cmd = Workbooks.Open("C:\................\commande.xls")
Set ws_cmd_encaiss = wb.Worksheets("Encaissement_Ventes")
Code:
Dim DateCommandeCompta As String
Dim MontantCommandeCompta As Integer
Dim Ligne As Integer
Bof.
Une date c'est "Date" (euh... ben quoi)
Un montant c'est "Currency" (sinon, quid des centimes !)
Une ligne de classeur, c'est "Long" (Integer s'arrête à 32767. En version 32 bits, Excel dispose de 65536 lignes et en mode 64 bits, c'est 1048576 !)
"While .. Wend" est obsolète. Utilise "Do While .. Loop".
-----------------------------------------------
[fixed]if cellule du classeur 1 onglet 1= a cellule du classeur 2 onglet1
then couper la celulle classeur 1 et copier dans classeur 3 et couper cellule classeur 2 et copier dans classeur3 a la suite de l'autre[/fixed]
Ton test (sans e [:zeb:4]) amène quelques questions.
Il y a bien trois classeurs, 1, 2 et 3. Lequel est le classeur courant (celui qui contient la macro) ?
On ne demande pas à un programme, fut-il une macro, d'utiliser le presse-papier. On ne coupe, ni ne colle quoique ce soit.
Si la cellule 1 et la cellule 2 contiennent la même valeur, qul intérêt de recopier la valeur de chacune dans le classeur 3 ?
Donc il te faut trois variables pour tes trois feuilles. Si l'un d'eux est le classeur qui contien la macro, alors pas besoin de variable pour ce classeur. mais une variable pour la feuille peut être utile.
Admettons que le troisième classeur soit celui qui contient la macro, qu'on veuille enregistrer dans la feuille 1 de ce classeur, et que les données soient issues des feuilles ws_ogone et ws_cmd_encaiss.
L'algo est le suivant :
1°) On détermine la dernière ligne de la feuille 1.
2°) On détermine la dernière ligne de la feuille 2.
3°) On détermine la dernière ligne de la feuille 3.
4°) On parcourt toutes les lignes de la feuille 1, du début (ligne 2 pour laisser un éventuel titre) à la dernière ligne.
4.1°) Pendant ce parcours, on cherche dans la colonne 1 de feuille 2, la valeur de la colonne 1 de la ligne en cours de la feuille 1.
4.2°) Quand on trouve cette valeur, on copie les trois premières colonnes de la feuille 1 et les colonnes 2 à 3 (pas la peine de répéter l'information présente dans la colonne 1) de la feuille 2, dans la première ligne vide de la feuille 3.
Ca donne :
Code:
Dim last_row_ogone As Range
Dim last_row_cmdencaiss As Range
Dim next_row_target As Range
Set last_row_ogone = ws_ogone.Cells(Application.Rows.Count, 1).End(vbUp).EntireRow
Set last_row_cmdencaiss = ws_cmdencaiss.Cells(Application.Rows.Count, 1).End(vbUp).EntireRow
Set next_row_target = ThisWorbook.Worksheets(1).Cells(Application.Rows.Count, 1).End(vbUp).Offset(1).EntireRow
Dim row_ogone As Range
Dim row_cmdencaiss As Range
For Each row_ogone In ws_ogone.Range(ws_ogone.Cells(2, 1), last_row_ogone)
For Each row_cmdencaiss In ws_cmdencaiss.Range(ws_ogone.Cells(2, 1), last_row_ogone).Rows
If row_ogone.Cells(1).Value = row_cmdencaiss.Cells(1).Value Then
Intersect(row_ogone, ws_ogone.Range("$1:$3")).Copy Destination:=next_row_target.Cells(1)
Intersect(row_cmdencaiss, ws_cmdencaiss.Range("$2:$3")).Copy Destination:=next_row_target.Cells(4)
Set next_row_target = next_row_target.Offset(1)
End If
Next
Next
Ce n'est pas LA solution à ton problème, c'est un canevas à bien comprendre pour résoudre tous les problème dans ton genre
J'attends tes questions