Recopie données d'une feuille vers plusieurs feuilles

Bonjour à tous,

j'ai besoin de votre précieuse aide, je suis novice sur le sujet...

Je souhaite créer un userform un peu complexe (je sais je commence très fort en étant débutant), je vous explique :

à l'aide de ce userform je souhaite :

- en choisissant dans liste déroulante un ligne

- copier toute la ligne

-en cochant un ou plusieurs bouton (qui correspondent à des autres feuilles du claseur)

-en cliquant sur un bouton valider => coller les infos vers les feuilles cochées (en passant à la ligne suivante sans écraser les données).

Je ne sais pas si ma demande est claire ou si c'est réalisable??? du coup besoin de vous pour m'orienter et me dire si je suis sur le bon chemin cf le fichier.

Dernière chose, la fenêtre userform change constamment de taille mais les sauvegardes, des idées pour figer la taille??

MERCI BCP pour votre aide

Bonjour Ak_el,

Bienvenue sur le forum !

Le nombre d'onglet est-il amené à varier par la suite ? car ici tu as prévue 4 boutons mais si une nouvelle feuille et rajouté le useform devient obsolète.

A+

Merci Gabon37 pour ta réponse rapide.

Non je ne prévois de rajouter d'autres boutons (4 au total)

Dans ce cas à tester ce code dans le bouton Valider

Private Sub Valider_Click()
Sheets(1).Activate
For ligne = 2 To Cells(Rows.Count, 13).End(xlUp).Row + 1
    If Range("M" & ligne) = Me.ComboBox1.Value Then Exit For
    If ligne = Cells(Rows.Count, 13).End(xlUp).Row + 1 Then Exit Sub
Next ligne
Rows(ligne).Copy
If Me.APR.Value = True Then Sheets(2).Range("A" & 1 + Sheets(2).Cells(Sheets(2).Rows.Count, 2).End(xlUp).Row).PasteSpecial
If Me.SafetyPlan.Value = True Then Sheets(3).Range("A" & 1 + Sheets(3).Cells(Sheets(3).Rows.Count, 2).End(xlUp).Row).PasteSpecial
If Me.AdD.Value = True Then Sheets(4).Range("A" & 1 + Sheets(4).Cells(Sheets(4).Rows.Count, 2).End(xlUp).Row).PasteSpecial
If Me.CheckBox1.Value = True Then Sheets(5).Range("A" & 1 + Sheets(5).Cells(Sheets(5).Rows.Count, 2).End(xlUp).Row).PasteSpecial
Application.CutCopyMode = False
End Sub

A+

Gabin

EDIT, le code utilise la colonne B sur les onglets pour "savoir" où coller sur la dernière ligne. Si il est possible que ton tableau contiennent des vides il faudrait changer cette colonne pour une qui seras toujours remplis sans fautes.

Pour ce qui est de la taille du Userform, je n'ai jamais fais face à ce problème je ne saurais t'aider.

La moindre aide que je peux apporter est ce code à placer dans la partie Initialize

Me.StartUpPosition = 0
Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2

Il permet de centrer le Userform sur la fenêtre active Excel (pratique lorsque tu as 2 écrans.)

Ah oui super ça marche nickel. MERCI BCP

Juste pour mon info, avec ta solution on c/c toute la ligne, comment faire pour se limiter un nombre précis de colonne (exemple de A à M)

Re,

Change pour ce code:

Private Sub Valider_Click()
Sheets(1).Activate
For ligne = 2 To Cells(Rows.Count, 13).End(xlUp).Row + 1
    If Range("M" & ligne) = Me.ComboBox1.Value Then Exit For
    If ligne = Cells(Rows.Count, 13).End(xlUp).Row + 1 Then Exit Sub
Next ligne
Range("B" & ligne & ":AD" & ligne).Copy
If Me.APR.Value = True Then Sheets(2).Range("B" & 1 + Sheets(2).Cells(Sheets(2).Rows.Count, 2).End(xlUp).Row).PasteSpecial
If Me.SafetyPlan.Value = True Then Sheets(3).Range("B" & 1 + Sheets(3).Cells(Sheets(3).Rows.Count, 2).End(xlUp).Row).PasteSpecial
If Me.AdD.Value = True Then Sheets(4).Range("B" & 1 + Sheets(4).Cells(Sheets(4).Rows.Count, 2).End(xlUp).Row).PasteSpecial
If Me.CheckBox1.Value = True Then Sheets(5).Range("B" & 1 + Sheets(5).Cells(Sheets(5).Rows.Count, 2).End(xlUp).Row).PasteSpecial
Application.CutCopyMode = False
End Sub

Sur la ligne: Tu peux faire varier B et AD pour sélectionner les colonnes à copier/coller

Range("B" & ligne & ":AD" & ligne).Copy

Parfait.

Un grand MERCI

Gabin37 si tu es encore là, j'ai besoin de tes lumières..

J'ai essayé de modifier : Range("B" & ligne & ":AD" & ligne).Copy avec des colonnes différentes Range("D" & ligne & ":N" & ligne) par exemple, en modifiant aussi

les lignes en dessous pour commencer à coller à la même colonne (D) :

If Me.APR.Value = True Then Sheets(2).Range("D" & 1 + Sheets(2).Cells(Sheets(2).Rows.Count, 2).End(xlUp).Row).PasteSpecial

mais il m'écrase les données (il ne créée pas de nouvelle ligne à chaque fois)

Des idées ou j'ai pu commettre une erreur?

Hello,

If Me.APR.Value = True Then Sheets(2).Range("D" & 1 + Sheets(2).Cells(Sheets(2).Rows.Count, 2).End(xlUp).Row).PasteSpecial

Je pense que le problème vient de ce chiffre en blue, il correspond au numéro de la colonne a tester pour savoir sur quelle ligne coller les données. Ici 2 correspond donc à la colonne B, si tu ne colles rien sur la colonne B, le programme considérera tjrs la première ligne comme la ligne vide ou coller les valeurs.

Je ne sais pas si mes explications sont très claires ^_^

Arrives-tu a corriger solo avec ces explications ?

A+

Hello,

Yes très claire comme explication, du coup par exemple si je souhaite commencer à remplir à partir de la colonne D je mets "4" au lieu de "2"

pas forcément, voici un exemple

image

Ici tu vas mettre 8 au lieu de 2, qui correspond à la colonne H car c'est la seule qui ne contient pas de trou et donc aucuns risque d'écraser les données au moment du collage

Tout dépend de comment les données sources sont complétés

Ok je comprends mieux, du coup dans il faut mettre dans le code le n° de la colonne qui est bien renseignée pour être sûr de ne pas écraser cette ligne

Rechercher des sujets similaires à "recopie donnees feuille feuilles"