VBA , concaténer et copier des cellules d'une page à une autre

Bonjour,
voici mon soucis.
test1.xlsm (779,7 Ko)
Je désire copier les cellules B7 à B19 de ma feuille 1 vers B4 de ma feuille 2. La difficulté que je rencontre c’est qu’il faudrait que la macro concatènne ces cellules en les séparant par une virgule et un espace. Et qu’elle ne prenne en compte que les cellules remplies entre B7 et B30 de la feuille 1.
Afin que je puisse utiliser cette macro sur d’autre feuille (ce sont chaque fois des articles différents, chaque fois je crée une nouvelle feuille où ces nouveaux articles apparaissent et j’y place le bouton avec la macro.

Je vous remercie de votre aide et je joins un exemple.

Bonjour,

Voici une proposition :

Sub test()
Dim aliment As Range
Sheets(1).Select
Range("B7: B30").Name = "aliments"
Sheets(2).Select
For Each aliment In Range("aliments")
If Len(aliment) > 2 Then
If Range("B4") = "" Then
Range("B4") = aliment
Else
Range("b4") = Range("b4") & ", " & aliment
End If
End If
Next
End Sub

test1.xlsm (785,9 Ko)

Cordialement
Will-Fread

WOuawwwwww super, merci à toi Jacquinot_WILL-FREAD.
C’est exactement ça.

Mille mercis

Bonjour Will-Fread,

je me demandais s’il serait possible que tu me montres comment dois-je procéder pour que cette fonction puisse fonctionner sur n’importe quelle page sur laquelle j’insèrerais ce bouton avec cette macro (activesheet ?), plutot que sur sheet 1 et 2, imaginons que je la place sur une feuille qui sert de page type sur laquelle on entre des données et puis on la sauve sous un nom et on continue ainsi de suite…

merci à toi

Bonjour @desireles ,

Si les références ne change pas c’est à dire :
On utiliser toujours B7 à B30 et que c’est dans la première feuille et qu’on veut toujours le resultat dans la cellule B4 de la feuille 2 :

  • Vous n’avez juste qu’à copier ces lignes de code
  • Créer un module, coller ces lignes dans l’module
  • Insérer une forme et « Affecter une macro » à cette forme et c’est bon.

Nb : Et ne pas oublier d’enregistrer le fichier Excel en prenant en charge les macros.

Cordialement
Will-Fread

Merci, peux-tu jeter un oeil parce que depuis hier je me prend la tete dessus et je comprend pas il me renvoie 200,100,200… au lieu des aliments.

Sub imprime_etiquette()
Dim etiquette As Range
Sheets(« Page Type »).Select
Range(« C7:C30 »).Name = « aliments »
Sheets(« ETIQUETTE »).Select
For Each aliment In Range(« aliments »)
If Len(aliment) > 2 Then
If Range(« A1 ») = «  » Then
Range(« A1 ») = aliment
Else
Range(« A1 ») = Range(« A1 ») & ", " & aliment
End If
End If
Next
End Sub
Calcul nutriments OK2-1.xlsm (2,6 Mo)

Je dépose le fichier total

Parce que le soucis , c’est qu’une fois la feuille type terminée, je vais renommer cette feuille et faire une copie de la feuille type pour y insérer d’autres aliments.
Mais du coup lorsque la feuille est renommée ça ne fonctionnera plus?

Si, je l’ai lié à la première feuille et la deuxième feuille.
Les noms des feuilles ne causeront pas des problèmes.

ça ne fonctionne pas, je ne comprend pas pourquoi.
le (1) et le (2) signifie qu’elles se trouvent en 1ère et 2ème position, mais ce n’est pas le cas.
Prenons un exemple:

je me trouve sur la « Page Type » (qui se trouve en avant dernière position dans le classeur, du coup vu qu’elle n’est plus en 1ère position , ça ne fonctionne plus), sur celle-ci j’entre des aliments.
J’ai une macro qui propose d’enregistrer ce nouvel onglet et de dupliquer (pour toujours garder ma « Page Type ».
Une fois que je me retrouve sur un autre onglet ce code ne fonctionne plus, puisque la référence de la position (1) et (2) ne sont pas les mêmes.

Vous me suivez ??

En utilisant activesheet, mais c’est mieux si vous envoyez un autre exemple de cas, comme ca on pourras l’adapter.

Calcul nutriments OK2-1 - Copie.xlsm (1,9 Mo)

Là pour l’instant il me renvoie rien sur « ETIQUETTE » A1

Un instant, je vais essayer de voir,…

(-Je parlais de la première feuille classeur, ce qui n’est pas le cas de ton fichier.)

Expliquez-moi comment vous utilisez la feuille « Page Type » et « Etiquette » ensuite qu’est ce qu’il faut copier ?
Comme ca on automatise tout, et en cèle votre code.

Merci,

alors j’ai mon classeur qui reprend toute les recette différentes, mais la « Page Type » me sert de canevas, donc chaque fois je reviens dessus pour en créer une nouvelle.
Ensuite une fois la nouvelle recette faite, je clic sur enregistrer (qui duplique l’onglet et une input demande « quel nom », de sorte que la nouvelle recette s’ajoute aux onglets.
J’ai créé un bouton « nouveau » qui efface les données sur Page Type pour pouvoir en recréer une nouvelle.
Et enfin un bouton « etiquette » qui copie les données de la colonne C7 à C30 vers la page ETIQUETTE pour y avoir une étiquette à imprimer.
En bonus j’ai placé en A5 de la Page Type un endroit pour y écrire un lien (une adresse web) et automatiquement un qr code se crée dans la page ETIQUETTE, sur l’étiquette.

J’espère avoir été clair et concis.
encore merci du temps que vous prenez pour moi

Je vous met le dernier modèle, tout à l’air de fonctionner, sauf lorsque je duplique la Page Type ( il est pas content parce que le tableau « aliments » de C7 à C30 existe déjà, du coup une fenêtre s’ouvre et demande si oui ou non on doit garder « aliment », et e clic sur oui. Je cherche maintenant à faire disparaitre ce message.

Calcul nutriments OK2-1 - Copie.xlsm (1,8 Mo)

Re,
Voici quelque correction :
Avant la fin de la ligne des codes étiquette, Mettez :

On Error Resume Next
Range("aliments").Name = ""
Sheets("Page Type").select

et avant la fin de la ligne des codes « Enregistre », mettez :

Sheets("page type").Select

Et faites moi signe au cas où
Will-Fread

merci , j’ai mis ceci et ça fonctionne aussi :

Sub imprime_etiquette()

Dim aliment As Range
ActiveSheet.Select
Range(« C7:C30 »).Name = « aliments »
Sheets(« ETIQUETTE »).Select
Range(« A1 »).ClearContents
For Each aliment In Range(« aliments »)
If Len(aliment) > 2 Then
If Range(« A1 ») = «  » Then
Range(« A1 ») = aliment
Else
Range(« A1 ») = Range(« A1 ») & ", " & aliment
End If
End If
Next
End Sub

1 « J'aime »

Bonjour,
Alors, félicitation !
Bonne continuation pour la suite.
Cordialement

Bonjour,

comme vous m’avez l’air calé, j’aurais une question sans vouloir abuser.
Sur ma page ETIQUETTE , dans le code imprime_etiquette, j’ai fais un Range(« A1 »).ClearContents, mais j’aurais besoin que les mots Ingrédients (souligné en gras) apparaissent avant les aliments et une phrase au bas de l’etiquette aussi (Peut contenir des allergènes).
Y a t-il moyen de faire en sorte dans le code, pour que ceci reste en permanence ?

merci Jacquinot

J’ai pas vraiment compris ce que vous voulez dire ici ?
Où est ce qu’on peut l’trouver dans votre feuille « Page Type » ?

image
En fait sur ma page etiquette, apparait bien sur les aliments selectionne précédemment, mais il faudrait que ce qui est en rouge reste en permance sur l’etiquette, ne s efface pas à chaque nouvelle etiquette ( création)