VBA ajout lignes sous certaines conditions avec bouton

Bonjour à tous, je suis un novice de VBA et j’aimerais faire un fonction dans le cadre d’amélioration en continu dans mon entreprise.

Je souhaiterais, à l’aide d’un bouton, copier cellules A4 et B4 dans un onglet 1 et coller dans l’onglet 2 dans les cellules A18 et B18 d’un autre tableau. Bien sur, je souhaiterais que ce bouton puisse avoir la fonction d’ajouter une nouvelle ligne du tableau de l’onglet 1 remplie et non pas que cela recopie une nouvelle fois les lignes précédentes. Le bouton je sais le créer ( ce n’est pas le plus compliqué ) mais c’est surtout pour le code…

Je vous mets en PJ le classeur Excel avec le code dedans car évidemment je ne viens pas les mains vide j’ai déjà commencé mais mon manque d’expérience fait que je ne comprends pas grand chose…

Je vous remercie par avance pour votre aide je vous en serais très reconnaissant,

Bonne journée
WORKING LIST test.xlsm (43,7 Ko)

Bonjour

J’ai étudié ton fichier et la macro que tu as réalisé
Elle est parfaite si ce n’est que pour fonctionner correctement et plus particulièrement obtenir la bonne ligne à remplir onglet « ACCEPTANCE SHEET » colonne B déterminé par ces 2 lignes de code :

lstrw_feuil2 = ws_feuil2.Cells(Rows.Count, 2).End(xlUp).Row 'colonne B pour le 2
ligne_coller = lstrw_feuil2 + 5

que la cellule colonne B en dessus de la première à considérer de ton tableau ai une donnée

Sinon la première déterminée est celle qui est non vide ou à défaut la cellule B1
C’est l’objet de cette partie :

lstrw_feuil2 = ws_feuil2.Cells(Rows.Count, 2).End(xlUp).Row

En l’état aucune donnée en colonne B donc elle te donne la ligne 1 :

si je mets une donnée en cellule B15 :

Cette instruction te donne ligne 15 :

image

Ce qui correspond à la ligne recherchée

La 2° ligne rajoutant 5 pour obtenir la ligne 20 de recopie :

Donc en alimentant d’une donnée la cellule B15 tout fonctionne :

Je te joint ton fichier ainsi adapté

Testes et dis moi

J’ai rajouté une macro de ma conception « Sub copier_job2() » plus light et obtenant le même résultat

Petites suggestion

Il vaut mieux cibler les onglets par leur nom que par leur indice car le nom reste stable tant qu’il n’est pas modifié par l’utilisateur alors que l’indice ne l’est pas
si un onglet est ajouté ou supprimé les indices des onglets restant sont modifiés et donc le traitement en est affecté

Fais moi un retour

WORKING LIST test.xlsm (45,1 Ko)

Bonjour,

Tout d’abord, merci de ton retour et de ton temps pour tes explications.
Effectivement c’est beaucoup mieux merci !

Cependant, un problème persiste toujours: lorsque je rajoute une ligne dans le tableau du premier onglet, et que j’active à nouveau la macro, toutes les lignes précédentes se copie/colle à nouveau (ce que je veux éviter). Je joints une image pour que ce soit clair.

En bref, mon besoin est: lorsque j’ajoute une ligne dans tableau onglet 1 ( avec un bouton à la rigueur) je souhaiterais qu’une ligne se créer dans mon tableau de l’onglet 2 avec la donnée correspondante collée.

Bien sur je sais que c’est l’étape suivante et que le problème de base est réglé !

Merci en tout cas,

Bonsoir
Je viens de rentrer ce soir
Des demain je regarde et te réponds
À très bientôt donc

Bonjour,

Merci beaucoup à bientôt

Bonjour

Petite précision
Faut il rajouter la nouvelle dans l’onglet de destination ou supprimer celles qui sont déjà présentes pour mettre à la place celle-ci ?
Dans cette dernière option comment déterminer les lignes à intégrer dans l’onglet cible ?

Merci de me dire

Bonjour,

Ce que je souhaiterais, ce serait d’ajouter une nouvelle ligne dans l’onglet de destination lorsque j’en ajoute une dan le fichier de départ.

le scénario souhaité:

  • j’appuie sur un bouton qui créer une nouvelle ligne dans mon onglet de départ
  • on me demande ce que je veux mettre comme nom dans la nouvelle cellule
  • je fais ok
  • la ligne se créer dans le tableau de mon onglet de départ
  • au même moment, une nouvelle ligne se créer à la suite de la dernière dans le tableau de l’onglet d’arrivée avec la donnée rentrée dans la ligne de départ et ainsi de suite

Mais je souhaite garder dans mon tableau d’arrivée, les lignes précédentes.

Est ce plus clair ?

Merci à vous

Ci-joint une nouvelle proposition
Les codes en place nettoient la colonne B de l’onglet cible « ACCEPTANCE SHEET » avant de la remplir à nouveau de l’ensemble des noms de l’onglet « WORKING LIST »
Ainsi c’est une une réinitialisation de l’onglet cible
J’ai rajouté un code pour l’intégration d’une nouvelle saisie au coup par coup
Ce traitement « Ajout » demande de saisir le nouveau nom l’intègre en colonne B dernière ligne dans les 2 onglets

Fais des tests et dis moi

WORKING LIST test.xlsm (46,3 Ko)

Bonjour,

J’ai fait des essais c’est quasiment bon ! La seule chose est que lorsque je créer des nouvelles ligne dans l’onglet de départ, ça ne créer pas de nouvelle ligne du tableau dans l’onglet d’arrivée. Je m’explique: le contenu s’inscrit bien au bon emplacement mais les bordures du tableau n’apparaissent pas …

Par contre le rendu est déjà génial ! Merci beaucoup

Merci pour ce retour
Je n’ai pas intégré dans l’onglet cible l’ajout des lignes pour faire suivre l’encadrement ceux-ci étant déjà présent pour plusieurs portions suivantes à traiter

Un prés formatage à l’avance des cadres permettait d’éviter d’inclure dans le traitement cette mise en forme
Dans cette version ci-joint elle est incluse dans la macro « Ajout »
Je ne l’ai pas rajouté dans les autres
A toi de voir si cela suffit

Testes et dis moi

WORKING LIST test.xlsm (46,5 Ko)

J’ai essayé mais il y a un problème lors de l’ajout de ligne dans le second tableau. J’ai l’impression que ça n’ajoute pas la bonne ligne …

Par exemple si je ne garde qu’une seule ligne à remplir lorsque j’ajoute une nouvelle ligne ça prend l’entête…

Merci et bonne soirée

Je n’ai pas prévu ce cas où toutes données sont supprimées dans le tableau cible colonne B
Donc j’ai apporté une petite modification qui le prend en compte
Ton tableau cible onglet « ACCEPTANCE SHEET » doit avoir au moins un quadrillage en place comme ceci à remplir colonne B ou non:

Le traitement se chargera de le remplir colonne B ou de remplir le suivant à l’identique de la mise en forme mais au moins le premier de base en place

Testes et dis moi

WORKING LIST test.xlsm (46,5 Ko)

Je test demain matin et te tiens au courant, oui il doit avoir un quadrillage type comme celui ci effectivement.

Merci beaucoup

Bonjour, après test c’est parfaitement ce que je souhaite faire.
Par contre lorsque j’ajoute toutes les ligne d’un coup avec la fonction copier_job2, cela ne crée pas de nouvelles lignes avec des bordures etc. dans le tableau de l’onglet ACCEPTANCE SHEET.

Je ne sais pas si je fais la bonne manip pour le coup mais je pense qu’il manque quelque chose dans le code…

Merci par avance et en tout cas c’est nettement mieux

Bonjour

Merci pour ce retour

« Par contre lorsque j’ajoute toutes les ligne d’un coup avec la fonction copier_job2, cela ne crée pas de nouvelles lignes avec des bordures etc. dans le tableau de l’onglet ACCEPTANCE SHEET. »

Je l’avais signalé lors d’une de mes réponses :

mes propos

Je n’ai pas intégré dans l’onglet cible l’ajout des lignes pour faire suivre l’encadrement ceux-ci étant déjà présent pour plusieurs portions suivantes à traiter

Un prés formatage à l’avance des cadres permettait d’éviter d’inclure dans le traitement cette mise en forme
Dans cette version ci-joint elle est incluse dans la macro « Ajout »
Je ne l’ai pas rajouté dans les autres
A toi de voir si cela suffit

Les macros autres que « Ajout » en début de traitement vident l’onglets « ACCEPTANCE SHEET » de ses données colonne B et les réinjectent sur la base de celles onglet « WORKING LIST » même colonne

Il n’y a donc aucune action dans l’onglet « WORKING LIST » simplement une réinitialisation de l’onglet « ACCEPTANCE SHEET » des données du premier

Lorsque tu effectues ces traitements il suffit de préparer ton onglet « ACCEPTANCE SHEET » avec le quadrillage nécessaire en fonction du nombre de données onglet « WORKING LIST » à lui intégrer colonne B

Sinon si pour toi c’est rédhibitoire ci-joint une nouvelle version qui le réalise automatiquement avec le traitement « copier_job2 »

Fais des essais et dis moi

WORKING LIST test2.xlsm (48,3 Ko)

Bonjour, c’est parfaitement ce que je souhaite merci beaucoup du temps prit pour résoudre ce problème.

J’avais juste une question si je veux reproduire ce code non plus pour une colonne mais pour deux colonne je dois rajouter .Range(« A » & ligne etc.) dans chaque ligne ou je fais des opérations sur les lignes ?

Encore merci

Bonsoir
Merci pour ce retour
Pour les colonnes supplémentaires tu peux dupliquer les lignes de code pour chacune d elle en adaptant sa lettre
Maintenant pour toutes cellules qui se suivent au lieu de les multiplier tu peux mettre comme ceci :

Range(« A » & ligne,« D » & ligne) pour par exemple A/B/C/D
Ce qui donerait comme instruction :

Range(« A » & ligne,« D » & ligne).Value = Range(« A » & i,« D » & i).Value

L important est d avoir la même tranche en nombre de colonnes de chaque côté de l égalité

Essaies et si tu as des difficultés transmets moi un fichier à faire fonctionner de cette manière que je l adapte

Bonjour,

Très bien je fais des essais ce matin et je te tiens au courant.

Merci beaucoup

En faite, je souhaite non plus prendre la valeur de la colonne B mais les valeur des colonnes A, B et D et faire le processus initial.

Mets comme ceci :

Sheets(« ACCEPTANCE SHEET »).Range(« A » & ligne + 5, « B » & ligne + 5).Value = Sheets(« WORKING LIST »).Range(« A » & i, « B » & i).Value
Sheets(« ACCEPTANCE SHEET »).Range(« D » & ligne + 5).Value = Sheets(« WORKING LIST »).Range(« D » & i).Value

Essaies et dis moi

Sinon transmets moi un fichier en rapport afin que je l’adapte