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 Sub

Je joins le fichier pour que tu n'aies pas à renommer tous les champs.

Merci beaucoup, c'est exactement ce dont j'avais besoin.

Rechercher des sujets similaires à "copier feuille plages specifiques"