Copie de ligne suivant variable

Gaffy84

XLDnaute Nouveau
Hello World,

Voici maintenant quelques jours que je passe de Forum en Forum à la recherche d'information. Et maintenant je vais avoir besoin de vous car je bloque vraiment. Je suis pas un grand développeur, je bidouille comme je peux et j'essaye très souvent de reprendre des exemples pour arriver à mes fins. :eek:

Voici mon besoin :

J'ai 2 onglets. "Onglet1" comprenant certaines informations et "Onglet2 reprenant certaines informations de "Onglet1".

Dans "Onglet1" j'ai une cellule "B3" qui change assez souvent. Elle représente le nombre de ligne nécessaire à une liste de commandes plus bas (Entre 1 et 32). Il peut donc y avoir des lignes de commande entre A5 et A37. Après ces lignes de commandes il y a d'autres lignes non nécessaire.

Je voudrais que ma Macro sachent combien de ligne ont été prises pour les commandes, et ensuite copier ces lignes dans l'onglet 2, à partir de la ligne "A5".

Autre subtilité :eek:. Je ne veux copier que certaines informations de la ligne de commande et pas simplement faire une copie complète de ligne. Chaque information que je souhaite récupérer est dans une colonne avec un nom bien particulier (Ex : ID Commande).

Voici un exemple concret :

Cellule B3 = 12
Je récupère les informations que je souhaite dans certaines colonnes. Pour la colonne ID commande je récupère les 12 ID commandes qu'elle contient.

Ensuite je les colle dans la colonne ID commande présente en "Onglet2".

Si vous pouviez me faire un macro juste pour la copie de ID commande en fonction du nombre de commande je serai l'adapter à les autres colonnes.

Merci bien !:cool:
 

Gaffy84

XLDnaute Nouveau
Re : Copie de ligne suivant variable

Ok ok. On y arrive. Je viens de réussir à intégrer mes données dans le morceau de macro que tu m'as fais.

With shDest
Set PlageDest = shDest.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(NbrLignes, 3)
PlageDest.Value = shSource.Range("A5").Resize(NbrLignes, 3).Value
PlageDest.Offset(, 3).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 1).Resize(NbrLignes, 1).Value
PlageDest.Offset(, 4).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 2).Resize(NbrLignes, 1).Value
PlageDest.Offset(, 5).Resize(NbrLignes, 1) = shSource.Cells(5, 4).Resize(NbrLignes, 1).Value
PlageDest.Offset(, 6).Resize(NbrLignes, 3) = shSource.Cells(5, 11).Resize(NbrLignes, 3).Value
PlageDest.Offset(, 9).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 3).Resize(NbrLignes, 3).Value
PlageDest.Offset(, 12).Resize(NbrLignes, 3).Value = shSource.Cells(5, 5).Resize(NbrLignes, 3).Value
End With

Juste un point. Ce rajout me permet de rajouter ces informations sur une ligne. Pour rappel je prend la valeur d'une cellule dans "CMD", je la split en 3 informations dans un autre onglet. Mais cette cellule n'est pas répétée x fois.

Mais ce que je souhaiterai c'est qu'elle soit copiée le même nombre de fois que les autres.

Je continues à chercher en attendant ton aide.

Merci
 

Gaffy84

XLDnaute Nouveau
Re : Copie de ligne suivant variable

Bon bès j'essaie encore. Dans le With, j'ai testé avec une boucle mais il faudrait que je puisse lui dire de descendre d'un ligne à chaque fois ...

For i = 0 To NbrLignes
PlageDest.Offset(, 3).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 1).Resize(NbrLignes, 1).Value
PlageDest.Offset(, 4).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 2).Resize(NbrLignes, 1).Value
PlageDest.Offset(, 9).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 3).Resize(NbrLignes, 3).Value
Next i
 

Gaffy84

XLDnaute Nouveau
Re : Copie de ligne suivant variable

C'est bon !!!!

With shDest

'Calculer la plage de destination:
'Dernière Cellule occupée de la colonne A: Range("A" & Rows.Count).End(xlUp)
'Decaler cette cellule d'une ligne pour avoir la prochaine cellule libre: .Offset(1)
'Retailler au nombre de lignes et colonnes necessaires: .Resize(NbrLignes, 3)

Set PlageDest = shDest.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(NbrLignes, 3)

'y placer les valeurs de la plage source concernée:
'Plage Source = A5 retailler aux nombres de lignes voulues et de 3 colonnes
PlageDest.Value = shSource.Range("A5").Resize(NbrLignes, 3).Value

'Après c'est simplement du décalage et retaillage de plage à partir de la plageDest définie plus haut.
PlageDest.Offset(, 5).Resize(NbrLignes, 1) = shSource.Cells(5, 4).Resize(NbrLignes, 1).Value
PlageDest.Offset(, 6).Resize(NbrLignes, 3) = shSource.Cells(5, 11).Resize(NbrLignes, 3).Value
PlageDest.Offset(, 12).Resize(NbrLignes, 3).Value = shSource.Cells(5, 5).Resize(NbrLignes, 3).Value

For i = 0 To (NbrLignes - 1)
PlageDest.Offset(rowOffset:=i, columnOffset:=3).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 1).Resize(NbrLignes, 1).Value
PlageDest.Offset(rowOffset:=i, columnOffset:=4).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 2).Resize(NbrLignes, 1).Value
PlageDest.Offset(rowOffset:=i, columnOffset:=9).Resize(NbrLignes, 1) = shSourceTAP.Cells(1, 3).Resize(NbrLignes, 3).Value

Next i
End With

Merci à vous 2 pour votre aide !!!!!!! :)
 
G

Guest

Guest
Re : Copie de ligne suivant variable

hello Gaffy,

J'arrive et je vois que tu as fait du bon boulot! Bravo.
Tu sais, si je ne répond pas c'est que je ne suis pas là ou connecté mais pas devant le pc.

Mais j'ai lu tes messages.

je prend la valeur d'une cellule dans "CMD", je la split en 3 informations dans un autre onglet. Mais cette cellule n'est pas répétée x fois.

Dans tes prochains messages ou demandes essaie d'être plus précis.

Splitter n'est pas répéter. Splitter en 3 lignes ou 3 colonnes? Répétées en x Lignes ou x colonnes.

Ton langage et le mien peuvent être différent mais nous pouvons avoir un langage commun qui s'appelle Excel et/ou VBA.

Encore Bravo
A+
 

Discussions similaires

Réponses
22
Affichages
914
Réponses
8
Affichages
345
Réponses
8
Affichages
441

Statistiques des forums

Discussions
312 615
Messages
2 090 243
Membres
104 464
dernier inscrit
alzerco