Copier d'un feuille à une autre dans plages spécifiques
Bonjour à tous,
Voici ma situation, j'ai un fichier dans lequel j,ai 2 feuilles (LISTE et AUTOCOLLANT).
J'aimerais que les champs de ma feuille LISTE qui sont sous la ligne rouge se recopie sur ma feuille AUTOCOLLANT au bon endroit.
La première ligne sous la ligne rouge devient l'étiquette #1, la deuxième ligne l'étiquette #2 et ainsi de suite.
Ensuite, j'aimerais que lorsque j'imprime mes étiquettes de ma feuille AUTOCOLLANT, le mot "oui" vienne s'inscrire automatiquement vis à vis la bonne ligne dans la colonne IMPRIMER sur ma feuille LISTE et qu'ensuite cette ligne soit déplacé au-dessus de la ligne noire.
Pour le déplacement de la ligne si la colonne IMPRIMER est égale à "oui", j'ai commencé une macro mais elle ne fonctionne pas.
Voici mon fichier test.
Merci d,avance pour votre aide.
Est-ce que c'est réalisable avec des macros ?
Bonsoir,
Oui, ce que tu demandes est réalisable, mais que veux-tu exactement ?
Si tu veux imprimer toutes les étiquettes, qui ne sont pas imprimées, il faut faire une boucle qui imprime 6 étiquettes d'un coup et qui vient mettre "Oui" dans la cellule Imprimer correspondante.
Ou bien tu veux deux boutons, un pour générer les étiquettes et un autre pour les imprimer ?
Pourquoi imprimer seulement les étiquettes qui sont sous la ligne rouge ?
Pourquoi ne pas imprimer les étiquettes des lignes 4 a 7 ? A partir du moment ou la cellule Imprimer est vide, on sait qu'on doit imprimer l'étiquette. Dans ton exemple, il faut mettre les étiquettes des lignes 4 à 7 à Imprimer=Oui.
Grammaticalement parlant, soit tu mets l'entête de la colonne F "A Imprimer" et on imprime toutes les lignes qui sont à "Oui", soit tu mets l'entête "Imprimée" et on imprime seulement les lignes dont la colonne "Imprimée" est vide. Actuellement il y a confusion.
Pour faire quelque chose qui soit automatisable facilement, le mieux est de nommer chaque cellule qui doit être remplie dans la feuille Autocollant avec le nom de l'entête de colonne correspondant suivi d'un numéro pour la boucle, par exemple :
B4=ITEM.1
B6=MODELE.1 (Evite les accents, parce que VBA ne les aime pas trop)
B8=DIMENSION.1
B10=DESCRPTION.1
B12=PRIX.1
D4=ITEM.2
Dans l'attente de réponses,
Non je n,ai pas besoin d,un bouton pour générer et un autre pour imprimer les étiquettes. Un seul bouton pour imprimer les étiquettes suffit.
Pour l'histoire d'imprimer les données sous la ligne rouge, j'avoue que ce n'est pas nécessaire vu que lorsque l'étiquette a déjà été imprimer c'est écrit "oui" dans la colonne IMPRIMER vis à vis la ligne.
Bonsoir,
J'ai nommé tous les champs à renseigner de la Feuille Autocollant (Item.1.1, Item1.2, Description.1.1, Description1.2...) En tout 2 étiquettes par ligne, soit 4 items par page imprimée.
Voici le code :
Sub ImprAutocollants()
Dim Lig As Long, lEtiq As Long, lDernLig As Long, sExt As String
' Désactivation des événements
Application.EnableEvents = False
' Efface le contenu de la feuille Autocollant
Call EffaceAutocollant
With Feuil1
lDernLig = .UsedRange.Rows.Count
' Boucle sur les lignes
For Lig = 2 To lDernLig
' Ligne non vide et Autocolant non imprimé
If .Cells(Lig, "A") <> Empty And .Cells(Lig, "F") = Empty Then
lEtiq = lEtiq + 1
' Première étiquette
sExt = "." & lEtiq & ".1"
Feuil2.Range("Item" & sExt) = .Cells(Lig, "A")
Feuil2.Range("Modele" & sExt) = .Cells(Lig, "B")
Feuil2.Range("Dimension" & sExt) = .Cells(Lig, "C")
Feuil2.Range("Description" & sExt) = .Cells(Lig, "D")
Feuil2.Range("Prix" & sExt) = .Cells(Lig, "E")
.Cells(Lig, "F") = "Oui"
' Seconde étiquette
sExt = "." & lEtiq & ".2"
Feuil2.Range("Item" & sExt) = .Cells(Lig, "A")
Feuil2.Range("Modele" & sExt) = .Cells(Lig, "B")
Feuil2.Range("Dimension" & sExt) = .Cells(Lig, "C")
Feuil2.Range("Description" & sExt) = .Cells(Lig, "D")
Feuil2.Range("Prix" & sExt) = .Cells(Lig, "E")
.Cells(Lig, "F") = "Oui"
End If
' Impression des étiquettes
If lEtiq = 4 Or (lEtiq > 0 And Lig = lDernLig) Then
Feuil2.PrintOut
lEtiq = 0
Call EffaceAutocollant
End If
Next Lig
End With
' Réactivation des événements
Application.EnableEvents = True
End Sub
Private Sub EffaceAutocollant()
Dim Nm As Name
' Effacement des champs nommés
For Each Nm In ThisWorkbook.Names
If UBound(Split(Nm.Name, ".")) = 2 Then
Feuil2.Range(Nm).Value = Empty
End If
Next Nm
End SubJe joins le fichier pour que tu n'aies pas à renommer tous les champs.
Merci beaucoup, c'est exactement ce dont j'avais besoin.