Bonjour,
J'ai rajouté le fichier
Merci par avance pour votre aide
Version imprimable
Bonjour,
J'ai rajouté le fichier
Merci par avance pour votre aide
lastrow ne représente pas ta dernière ligne. C'est juste une valeur numérique.
Au moment où tu la renseignes, tu y places le numéro de la dernière ligne mais ensuite tu ajoutes des lignes à ton tableau et la valeur contenu par lastrow ne change pas (elle n'a aucune raison de changer puisqu'on ne lui demande pas).
Donc lastrow renvoie un numéro qui est toujours le même à chaque tour de boucle et tes données sont copiées à chaque fois sur la même ligne destination, écrasant les précédentes.
Etant donné que tu merges ces cellules au premier tour, elles restent fusionnées vu que rien dans ton code ne les sépare.
Et, je le répètes, dans 99% des cas, la fusion de cellules est une mauvaise idée et il est possible d'obtenir le même résultat par d'autres moyens.
En plus, si ça poses un problème à la copie (ce qui est probable), tu ne le verras pas étant donné que tu as demandé à VBA de ne pas afficher les alertes (ce que j'appelle travailler les yeux bandés dans mon message précédent).
Visiblement tu n'as pas tenu compte de la plupart des remarques que j'ai faites.
Je ne vois pas pourquoi je continuerai à perdre mon temps... :?
re
juste une petite demo pour te montrer une mecanique
et cela peut s'appliquer d'un sheets a l'autre
Pièce jointe 353653Code:
1
2
3
4
5
6
7
8 Sub test() Dim dest, provenance provenance = Array([E3].Value, [G3].Value, [F5].Value) dest = Array("A6", "C6", "D6") For i = 0 To UBound(dest) Range(dest(i)).Value = provenance(i) Next End Sub
Et en voici une autre utilisant non plus des array mais un range avec une seul boucle sur les areas
ce qui donne le meme résultat bien entendu ;)
Code:
1
2
3
4
5
6
7
8 Sub test() Dim dest, provenance Set provenance = Range("E3,G3,F5") Set dest = Range("A6, C6, D6") For i = 1 To dest.Areas.Count dest.Areas(i).Value = provenance.Areas(i).Value Next End Sub
engros ton adaptation pourrait donner ceci
addapte les noms de sheets pour toi
chez moi ca match ;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Sub test2() Dim WBK1 As Worksheet, WBK2 As Worksheet, plage1 As Range, plage2 As Range, L, col Set WBK1 = Sheets("Feuil1") 'les wbk(1/2) seront les sheet de depart et destinations Set WBK2 = Sheets("Feuil2") Set plage1 = WBK1.Range("E6,AA4,V5,AA1,Y5,F1,Y6,Y5,B8,V8,AF3,AF3,AF3") ' ca c'est ta plage de depart qui doit etre copier dans le sheets 2 L = WBK2.Range("A" & Rows.Count).End(xlUp).Row + 1 ' ca c'est la premliere ligne dispo dans le sheets 2 ' on construit la plage avec les lettre et "L" col = Array("", "B", "C", "D", "E", "F", "G", "H", "i", "J", "K", "M", "N", "O") 'voila ca correspond a ce qui il y a ci dessous en commentaire '*********************************************************************** 'WBK2.b LastRow = WBK1.E6 'WBK2.C LastRow = WBK1.AA4 'WBK2.D LastRow = WBK1.v5 'WBK2.E LastRow = WBK1.AA1 'WBK2.F lastrow=WBK1.Y52d enigme????????? 'WBK2.G lastrow=WBK1.f1 !!!!!!!!!!!!!!!!!!??????????? ' supprimer de la liste WBK2.G lastrow=WBK1.c18!!!!!!!!!!!!!????????????' j'ai fait un choix 'WBK2.H LastRow = WBK1.Y6 'WBK2.I lastrow=WBK1.Y5 2d enigme ?????? 'WBK2.J LastRow = WBK1.B8 'supprimer de la liste en doublon WBK2.J LastRow = WBK1.B8 'WBK2.K LastRow = WBK1.V8 'WBK2.M lastrow=WBK1.AF3 ??????? 'WBK2.N lastrow=WBK1.AF3 ???????? 'WBK2.O lastrow=WBK1.AF3 ???????? '************************************************************************* 'allez maintenant on boucle sur les AREAS!!!!!!!!!! For i = 1 To UBound(col) WBK2.Range(col(i), L).Value = plage1.Areas(i).Value Next End Sub
il te reste plus qu'a netoyer les lignes vertes tu vera il reste plus grand choses
bonne continuation
je precise que c'est une methode parmi tant d'autre c'est pas une bible et quoi que meme la bible il y en a plusieurs :mouarf:
Merci beaucoup pour ton temps que tu as consacré pour me proposer ceux ci, Vraiment merci
j'ai remplacé le nom des Sheets mais j'ai une erreur d’exécution 1004 de la méthode range de l'objet a échoué au niveau de cette ligne :
WBK2.Range(col(i), L).Value = plage1.Areas(i).Value
Je n'ai pas la condition aussi
Si la Valeur de la Cellule est Nok
mais C'est vraiment cool