Eh, il y a du très bon !
(...et du très mauvais, mais tu es là pour ça
)
Bon, alors d'abord, tu vas mettre ton pointeur sur
IsEmpty et appuyer sur la touche [F1].
Tu lis tout et après tu arrêtes de te demander pourquoi ça ne marche pas !
-----------------
En fait, on s'en fout, on veut que ça marche.
-----------------
Alors d'après ce que je vois, tu veux copier des données d'un onglet d'un classeur Excel, vers un onglet d'un autre classeur, sous condition.
Facile ! (si, si tu vas voir.)
Et pour ça, tu te donnes des variables pour accéder à tes classeurs. Excellent !
Sauf que tu as fait la moitié seulement de la démarche.
Parce que je résumerai bien ton énoncé en "copier des données d'une feuille de calcul vers une autre, sous condition".
Et donc, c'est à chacune des feuilles que je préfèrerais me référer.
Ça se fait comme ça :
Code:
Dim ws_des As Worksheet
Dim ws_ini As Worksheet
Set ws_des = ThisWorkbook.Worksheets("Eco")
Set ws_ini = Workbooks("Eco_2013.xls").Worksheets("Q-ROT")
Pour ce qui est de la zone à parcourir, l'utilisation de
End() est judicieuse, mais mal appliquée.
Révisons un peu :
Vous devez être
connecté pour voir les liens.
Et oui, tu ramènes par défaut, la valeur de la dernière ligne non-vide.
Il aurait fallu écrire :
Code:
For n = 9 To Range("A65536").End(xlUp).Row
Sauf, que je préfère travailler avec des cellules, des lignes, des colonnes plutôt qu'avec des coordonnées de cellules.
Code:
Dim curr_row As Range
For Each curr_row In ws_ini.Range(ws_ini.Rows(9), ws_ini.Cells(65536, 1).End(xlUp).EntireRow)
...
Next
Et voilà comment parcourir toutes les lignes de ta zone !
Un truc me chifonne. D'où sors-tu ce nombre, 65536 ?
Selon les versions d'Excel, la dernière ligne n'est pas forcément la 2^16-ème.
Alors on va demander à Excel de trouer lui-même cette valeur :
Code:
For Each curr_row In ws_ini.Range(ws_ini.Rows(9), ws_ini.Cells(ws_ini.Rows.Count, 1).End(xlUp).EntireRow)
...
Next
Que cherche-t-on, déjà ? Ah oui : qu'y-a-t-il dans la case C ?
Je compte A1, B2, C3. On va donc regarder dans la troisième case de chaque ligne :
Code:
For Each curr_row In ws_ini.Range(ws_ini.Rows(9), ws_ini.Cells(ws_ini.Rows.Count, 1).End(xlUp).EntireRow)
If curr_row.Cells(3).Text <> "" Then
MsgBox "Cette cellule [" & curr_row.Cells(3).address(0, 0) & "] n'est pas vide. Copions-là !"
End If
Next
Pas mal, hein ?
Bon, on continue.
Arggggggggggggh ! x_X
Mais quelle horreur !
Tu oses utiliser le presse-papier pour te servir de mémoire tampon.
T'imagines si tous les programmes qui tournent en même temps sur ton ordi en faisait tous autant !
t1cable:
JE T'INTERDIS D'UTILISER LE PRESSE-PAPIER (*) :fou:
Bon digère tout ça.
Tu as toute la nuit pour me trouver une solution pour copier tout ça dans ton autre onglet.
Que tu trouves ou pas, je te proposerai une soluce demain matin.
Sauf si t'arrives à faire aussi bien sinon mieux que ce que j'ai à te montrer, bien sûr.
_____________________
(*) tu fais bien ce que tu veux en fait