1 fichier avec 2 feuillets : organiser les valeurs
Bonjour,
je me suis arraché les cheveux toutes la nuit pour ne pas réussir à fr ce que je souhaite faire.
Dans un fichier Excel (ci-joint) j'ai deux feuillets. Je souhaite modifier le feuillet 1 en prenant les données du feuillet 2.
J'ai mis en jaune ce qui doit être modifié.
C'est un catalogue produits avec des produits à variables (Tshirt 1 - rouge + Tshirt 1 - Bleu + Tshirt 2 - rouge + Tshirt 2 - orange...).
Chaque produit (et non variation) a un ID. C'est ce qu'on voit dans la colonne A mais aussi dans la colonne O.
J'ai une plusieurs centaines de produits à mettre dans le feuillet 2. Si je fais ça à la main avec des copiés/collés, j'aurai jamais terminé.
Quelqu'un pourrait m'aider SVP ? Je pense que je demande beaucoup sur ce coup la... Dites moi si c'est possible pr vous SVP
Merci en tout cas
bonjour,
une proposition
Sub aargh()
Set ws = Sheets("feuil1")
dl = ws.Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("feuil2")
.Cells.Clear
ligne = 1
For i = 1 To dl
If i = 1 Then
ws.Rows(1).Copy .Rows(1)
ElseIf ws.Cells(i, 1) <> "" Then
ligne = ligne + 1
ws.Rows(i).Copy .Rows(ligne)
ws.Cells(i + 1, "Q").Copy .Cells(ligne, "Q")
End If
Next i
.Columns("A:A").Delete shift:=xlToLeft
.Columns("N:N").Delete shift:=xlToLeft
.Columns("P:T").Delete shift:=xlToLeft
End With
End Sub
Hello
merci beaucoup. Est-ce que tu peux m'expliquer ou me donner un lien qui explique comment utiliser ton code, l'importer dans mon fichier STP ? Car je consulte des tuto du type:https://www.youtube.com/watch?v=z9oObRe7B0w mais je ne suis même pas sûr que cela correspond.
Bonjour,
pour pouvoir utiliser cette macro
1) copier le code du forum (sélectionner puis copier Ctrl-C
2) ouvrir le classeur qui doit contenir la macro
3) faire alt-F11 pour aller dans l'éditeur de macro
4) faire menu->insérer->module
5) coller le code (ctrl-V)
6) adapter éventuellement le nom des onglets dans le code ("feuil1 et feuil2")
7) faire alt-F11 pour retour en excel
8) sauver le calsseur avec ses macros (format xlsm)
9) la macro est disponible et peut-être exécutée, faire alt-F8 pour lancer la macro
Merci
Par contre le Feuil2 est le feuillet qui contient les données. Mais c'est le Feuil1 que je souhaite modifier grâce aux données du feuil2.
Je souhaite modifier le feuillet 1 en prenant les données du feuillet 2.
EDIT: j'upload le fichier avec la macro dedans
Bonjour,
sorry, une nouvelle tentative (car ce que tu veux exactement n'est pas très clair pour moi)
Voici ce que j'ai compris sur base de tes cellules coloriées en jaune...
On recopie le contenu des colonnes F et M dans les lignes produits et sous produits,
On recopie le contenu de la colonne N dans les lignes produits et
On recopie l'id du produit dans les lignes sous produit
Sub aargh()
With Sheets("feuil2")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
Set plageprod = .Cells(1, 1).Resize(dl)
End With
With Sheets("feuil1")
dl = .Cells(Rows.Count, 2).End(xlUp).Row
For i = 2 To dl
If .Cells(i, 1) <> "" Then
Set re = plageprod.Find(.Cells(i, 2).Value, lookat:=xlWhole, LookIn:=xlValues)
ProdID = "id:" & .Cells(i, 1)
End If
If Not re Is Nothing Then
.Cells(i, "G") = re.Range("F1")
.Cells(i, "N") = re.Range("M1")
If .Cells(i, 1) <> "" Then
.Cells(i, "P") = re.Range("N1")
Else
.Cells(i, "O") = ProdID
End If
End If
Next i
End With
End Sub
Merci
Je check ton nvx code (quand il n'y aura plus l'erreur) et je tente de décrire au mieux par écrit ce que je voudrais fr
A priori c'est cette ligne qui cause problème :
If Not re Is Nothing Then
Bonjour,
manquant d'information, je fais des hypothèses. Apparemment, celles-ci ne sont pas correctes et donc le code ne fonctionne pas.
je vais m'arrêter là en attendant, devoir si les explications que tu fourniras me donnent envie de continuer à examiner ta demande.
mets-nous donc un fichier avec la situation de départ, la situation finale et les règles (la recette) pour passer de l'une à l'autre.
Ok pas de soucis
J'ai uploadé dans ce msg le fichier dont je parle.
La situation de départ, c'est la feuillet 2. C'est ça que j'ai actuellement comme données.
Ce sur quoi je souhaite arriver, c'est ce qu'il y a sur le feuillet 1. La j'ai mis à la main les 6 premières lignes dans le feuillet 1, mais normalement avec ce qu'il y a dans le feuillet 2, il devrait y avoir 3lignes * 5 produits = 15 lignes.
Dans le feuillet 1, il y a 3 lignes par produit.
1 ligne pour définir le produit + 2 lignes pour définir ses variantes.
Dans la colonne A il y a l'ID du produit. Cet ID est repris dans les deux lignes des variantes du produit dans la colonne O. L'iD du produit, c'est simple, ça commence par 900, le deuxième produit à l'ID 901, le troisième 902 etc.
Dans la colonne B il y a le titre du produit (premiere ligne) puis dans les deux lignes d'en dessous (les 2 variantes du produits) il y a le nom du produit + le nom de la variante (ici iPhone 7 puis iPhone 7 Plus).
Dans la colonne N, il y a l'URL de l'image du produit. L'url change pour chaque produit. Cependant l'URL est la même pour chaque variante du même produit. Donc l'URL changera toutes les 3 lignes (vu qu'il y a 1 ligne pour le produit + 2 lignes pr les variantes ce même produit).
Dans la colonne P, il y a la catégorie.
Dans le feuillet 2 il y a :
A : le nom du produit (la dans ce feuillet 2 il y a une ligne par produit car il n'y a aucune variante dans ce feuillet, et c'est bien la le problème, il faut que je créer les variantes dans le feuillet 1).
F: la description du produit
M l'URL de l'img du produit
N : la catégorie du produit.
Donc je souhaiterais qu'à partir du feuillet 2, ça génère un feuillet 1 avec la bonne mise en forme. Cad 3 lignes pour chaque produit (1 ligne pr le produit général + 2 lignes pour les variantes) et des ID de produits qui se suivent dans la colonne A et qui soient utilisé aussi dans la colonne O.
Si jamais il y a quelque chose que j'ai mal exprimé n'hésite pas surtout
bonjour,
un essai
Sub aargh()
With Sheets("feuil2")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
Set ws = Sheets("feuil1")
dlws = ws.Cells(Rows.Count, 2).End(xlUp).Row
prod = 899
ws.Cells(2, 1).Resize(dlws, 20).Clear
ligne = 1
For i = 2 To dl
ligne = ligne + 1
prod = prod + 1
.Cells(i, 1).Resize(1, 13).Copy ws.Cells(ligne, 2).Resize(3, 13)
.Cells(i, 14).Resize(1, 2).Copy ws.Cells(ligne, 16).Resize(3, 2)
ws.Cells(ligne, 1) = prod
ws.Cells(ligne + 1, 15).Resize(2) = "id:" & prod
ws.Cells(ligne, 9) = ""
ws.Cells(ligne, 17) = ""
ws.Cells(ligne, 3) = "variable"
ws.Cells(ligne + 1, 3).Resize(2) = "variante"
ligne = ligne + 2
Next i
End With
End Sub
Hello
Roooh MERCI c'est presque magic
J'ai juste 2 bidouilles supplémentaires si c'est possible bien sûr...
Ca serait dans le Feuil1, dans la colonne B (Nom du produit), ne pas toucher la première ligne du produit (sur les 3 au total) mais rajouter "-1" puis "-2" au ligne en dessous qui correspondent au variations du produit.
- Tjrs dans le Feuil1, dans la colonne C, ne pas mettre "variante" mais "variation". C'est moi qui me suis trompé dans le terme dans mes msg précédents dsl.
- Tjrs dans le Feuil1, dans la colonne T (Valeur(s) de l'attribut 1), mettre "iPhone 7, iPhone 7 Plus" dans la première ligne du produit (sur les 3 au total) et "iPhone 7" pour la ligne d'en dessous (la premiere variation) et "iPhone 7 Plus" dans la ligne d'en dessous (la seconde variation du produit).
- Tjrs dans le Feuil1, dans la colonne S, mettre "0" pr la première ligne du produit, puis "1" dans la deuxième ligne (donc la première variation du produit) et enfin "2" dans la 3 ligne, cad la seconde et dernière variation du produit.
Sincèrement en tout cas merci pour ta dernière réponse, ça m'a permis de faire un bon en avant immense
bonjour,
voici ma dernière contribution
Sub aargh()
With Sheets("feuil2")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
Set ws = Sheets("feuil1")
dlws = ws.Cells(Rows.Count, 2).End(xlUp).Row
prod = 899
ws.Cells(2, 1).Resize(dlws, 20).Clear
ligne = 1
For i = 2 To dl
ligne = ligne + 1
prod = prod + 1
.Cells(i, 1).Resize(1, 13).Copy ws.Cells(ligne, 2).Resize(3, 13)
.Cells(i, 14).Resize(1, 2).Copy ws.Cells(ligne, 16).Resize(3, 2)
ws.Cells(ligne, 1) = prod
ws.Cells(ligne + 1, 15).Resize(2) = "id:" & prod
ws.Cells(ligne, 9) = ""
ws.Cells(ligne, 17) = ""
ws.Cells(ligne, 3) = "variable"
ws.Cells(ligne + 1, 3).Resize(2) = "variation"
ws.Cells(ligne, 19).Resize(3) = Application.Transpose(Split("0,1,2", ","))
ws.Cells(ligne, 20).Resize(3) = Application.Transpose(Split("iPhone 7,iPhone 7 Plus!iPhone 7!iPhone 7 Plus", "!"))
For j = 1 To 2
ws.Cells(ligne + j, 2) = ws.Cells(ligne + j, 2) & "-" & j
Next j
ligne = ligne + 2
Next i
End With
End Sub