Copie valeurs colonne sous conditions valeurs autre colonne

Bonjour,

J'essaie de trouver un code me permettant de récupérer des valeurs figurant dans une colonne A, en fonction de valeurs présentes dans une autre colonne D et les copier à la suite sur une autre feuille et classé par ordre alphabétique .

exemple :

feuill1

colonne A--------colonne D

2012--------------Pierre

2014--------------Paul

2014--------------Jacques

2013--------------Daniel

je voudrais par la valeur d'un textbox qui sera sur mon userform et en activant un bouton récupérer les valeurs de la colonne D les copier sur la feuill2 à la suite, trier par ordre alphabétique.

textbox1.value = 2014

résultat

feuill2

colonne A

Jacques

Paul

J'espère avoir été claire.

Vous seriez sympa de m'aider à trouver Ce code

Je vous en remercie par avance

Amicalement

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

111classeur1-v1.xlsm (30.59 Ko)

Merci pour ta réponse rapide et complète

C'est beaucoup plus compliqué que ce que je pensais

Ton fichier est parfait et fait exactement ce que je souhaite.

J'ai essayer, mais je n'arrive pas à adapter ton code a mon projet

J'ai fais une demande simple pensant pouvoir l'adapter mais en fait c'est plus compliqué que ça

Je te donne plus de précisions si tu veux bien continuer à m'aider

La procédure commence à partir un userform déjà très chargé donc ton initialize me semble lourd à intégrer à l'initialize du gros userform de départ

Private Sub UserForm_initialize()

End Sub

Est-il possible de mettre tout ou partie du contenu de ton Private Sub UserForm_initialize() au début du double clique du combobox qui se nomme enfmc qui lance la procédure ?

L'affichage de l'userform et la procédure ne doit se faire qu'à partir d'une feuille qui se nomme sheets("menu") qui reste affiché tout le temps de la procédure (l'utilisateur ne doit pas voir le déroulement, avec je pense l'utilisation de Application.ScreenUpdating = False/True)

La procédure se lance à partir d'un double clic sur un combobox qui se nomme enfmc

La valeur de l'année est donné par un combobox nommé anref

la feuille de départ ou figure les années et les prénoms se nomme sheets("BASE_FULL")

les données d'années démarrent en A4

les valeurs des prénoms à récupérer sont en colonne i donc .offset (9)

la feuille d'arrivée se nomme sheets("DONNES2")

les valeurs récupérées sont à mettre en Q1

les prénoms en Q1 jusqu'à ? doivent trier alphabétiquement

la liste ainsi obtenue alimente (par un simple .rowsource je pense) une combobox qui se nomme enfmc (de laquelle d'ailleurs je lance la procédure par un double clic)

Je reste à ta disposition pour plus de précisions et un grand merci pour ton aide

Amicalement


une petite question

que vient faire ce code ?

Range("A1").CurrentRegion.Offset(1, 0).ClearContents

et à quoi sert-il dans mon cas ?

il m'a tout effacé sur la page de réception des valeurs prénoms

nicaise a écrit :

une petite question que vient faire ce code ?

Range("A1").CurrentRegion.Offset(1, 0).ClearContentset

à quoi sert-il dans mon cas ?

Il sert à initialiser c'est à dire effacer la plage de cellules où la macro va écrire ses résultats.

Si tu cliques plusieurs fois sur le bouton ''Import'' les anciens résultats sont effacés avant d'être remplacés par les nouveaux.

Sans cette instruction, les nouveaux résultats se mettent à la suite des anciens...

Pour tes autres demandes, c'est bien volontiers que je t'aiderai mais il me faudrait alors ton ''vrai'' fichier. Je ne sais pas faire avec un fichier virtuel...

Bye !

Merci

Je te prépares demain matin samedi 24/01/15, un fichier allégé avec juste ce qu'il te faut (là je vais dormir, chez moi il est 0:25).

Bonne soirée

Ci-joint le fichier

merci d'avance

amicalement

36fichier-allege.xlsm (231.32 Ko)

Bonjour

Un essai à tester pour la production des états, si j’ai bien compris.

Elle s’obtient avec le bouton de la feuille ‘’ETATS’’ à partir de la feuille ‘’BASE_FULL’’

Cela te convient-il ?

Bonjour,

Merci pour ta réponse

J'ai téléchargé ton fichier mais la production des états ne fonctionne pas.

Quoi que j'indique dans le combobox1 (année de référence) j'ai le message du msgbox

"Il n'y a aucune valeur de l'année...). Il ne trouve pas la valeur année qui pourtant figure bien dans la BASE_FULL

Donc je n'ai pas pu voir ce que donne le résultat de la procédure une fois terminée.

Je cherche dans le code d'où peux venir le problème, sans succès pour l'instant.

Le code semble correcte pourtant


Pour tester, j'ai enlevé ceci du code

'On s'assure qu'il y a au moins une ligne pour l'année demandée

Set cell = bf.Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row).Find(Val(ComboBox1), lookat:=xlWhole)

' Set cell = bf.Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row).Find(Val(ComboBox1), lookat:=xlWhole)

If cell Is Nothing Then

MsgBox "Il n'y a aucune valeur de l'année " & ComboBox1 & _

" dans le tableau de la feuille ''BASE_FULL''", 16

End

End If

Le problème vient de ce bout de code parce qu'après

ÇA FONCTIONNE ET LE RÉSULTAT EST MAGNIFIQUE EXACTEMENT CE QUE JE VOULAIS

Juste un petit souci avec 2013 sélectionné avec cette ligne

'Totaux horizontaux

For col = 13 To derCol Step 3

Cells(lgn + 2, col).Formula = "=SUM(R[-" & lgn - 4 & "]C:R[-2]C)" >>>> le débogage m'emmène sur cette ligne

Edit : en fait pour 2013

2013 semble ne pas existé dans la BASE_FULL

Aussi comme j'ai enlevé le code au début qui teste la présence d'une ligne au moins pour l'année demandée la procédure continue et met erreur en calculant les totaux.

Si le bout de code est remis il ne trouve pas l'année et la procédure s'arrête

En produisant les états, je constate aussi un petit décalage avec les entêtes

Les périodes sont inversées avec les N_Fact, dès la première colonne, ce qui décale tout le reste

Edit

Après quelques test en changeant cette ligne

bf.Range(bf.Cells(ln, col - 16), bf.Cells(ln, col - 15)).Copy

en

bf.Range(bf.Cells(ln, col - 15), bf.Cells(ln, col - 14)).Copy

Le décalage ne se fait plus et tout va au bon endroit

Peux tu confirmer ?

J'espère que cette modification n'a pas d'incidence sur autre chose

Bonjour

Je vois que tu ne te débrouilles pas mal du tout.

Pour les lignes que tu as supprimées, il y avait effectivement un bug. J’ai complété l’instruction où il manquait un ''bf.'' :

Set cell = bf.Range("A4:A" & bf.Range("A" & Rows.Count).End(xlUp).Row).Find(Val(ComboBox1), lookat:=xlWhole)

Et le test s’effectue normalement sur mon PC.

Fais l’essai avec 2011 ou 2016. Tu dois avoir un message mais pas de bug.

Si tu fais l’essai avec 2013, cela plantait tout de même car il n’y a aucune ligne répondant aux critères et la macro ne parvenait pas à faire les totaux.

J’ai donc fait un autre test. Là aussi, fais l’essai.

Et dis-moi le résultat…

Pour le décalage, tu as raison, la correction que tu as faite est bonne. Je l’ai reprise.

Bye !

J'ai modifié la ligne au début

et ajouté ces lignes

If lgn = "" Then

MsgBox "Il n'y a pas de valeurs positives dans les colonnes ''RESTE PÉRIODE'' pour " & ComboBox1

End

C'EST PARFAIT L'ETAT FONCTIONNE PAFAITEMENT ET 2013 NE POSE PLUS DE PROBLEMES

Le résultat est impressionnant, et au delà de mes attentes.

Tu es très fort et franchement j'ai encore du chemin à faire pour arriver à ce niveau.

J'aime beaucoup le VBA et obtenir des résultats comme ceux-ci me motive pour progresser.

UN GRAND MERCI A TOI.

Tu as travaillé sur l'état et je t'en remercie, mais qu'en est-il de ma demande de départ

(la copie des noms enfants en fonction de l'année choisi) ?

Je t'ai envoyé le fichier avec un userform pour comprendre et y insérez le code.

Il te suffit de cliquer sur interface pour voire ce que je souhaite.

Je me suis peut être mal exprimé ou tu ne m'as peut être pas compris ?

Vu ce que tu as fait avec mon fichier pour la production de l'état, cela ne doit être qu'une formalité pour toi.

Merci de me tenir informer

(je mettrais résolu une fois ma demande de départ résolue)

Amicalement

Bonjour

nicaise a écrit :

qu'en est-il de ma demande de départ (la copie des noms enfants en fonction de l'année choisi) ?

Un essai à tester pour cette partie.

Mais je ne suis pas sûr du tout que cela soit bien ce que tu souhaites : à ton tour de cliquer sur le bouton INTERFACE de la page MENU et de jouer avec les menus déroulants de la fenêtre qui s'ouvre. Tu me diras ce qu'il en est.

Une remarque : tu sembles apprécier la propriété ‘’rowsource’’ des combobox.

Personnellement, je m’en sers très peu car la valeur de la propriété est alors figée.

Je préfère charger mes combobox avec la macro. De cette façon, ils s’adaptent aux besoins.

J’ai dû en effacer car on ne peut pas superposer les deux méthodes.

A te relire.

Bye !

Waou tu as fait compliqué et je me suis peut être mal fait comprendre.

Je vais avoir du mal a intégrer ton code à mon projet

Pour bien comprendre, le petit userform du fichier que je t'ai transmis n'existe pas.

C'est seulement un fragment du gros userfrom (capturé en jpeg pour te montrer le contexte de la procédure).

Ce que je souhaite est très simple.

Sur l'userform en sélectionnant l'année de référence, je veux que le combobox ne propose uniquement les enfants issus de la feuille BASE_FULL, classés par ordre alphabétique et correspndant à l'année choisie. C'est tout.

Je pense que l'idéal est de déclencher la procédure en choisissant l'année de référence (combobox anref) qui copirait sur la feuille DONNEES2 à colonne Q1 les enfants de l'année voulue issus de BASE_FULL et classés par ordre alphabétique.

La propriété rowsource du combobox enfant va de Q1à Q36 en sachant que cette structure ne peut accueillir que 30 enfants maxi par an

La limite du rowsource ne sera jamais atteinte.

Je trouve que c'est plus simple de cette façon parce que dès que des données apparaissent en DONNEES Q1, sans aucun autre code, ils sont dispo sur le combobox enfant.

Donc les seuls contrôles concernés par ma demande sont le combobox anneref et le combobox enfant.

Pour TOUT le reste, le projet est bouclé et les codes sont ok, c'est juste ça qui me manque pour la saisie des factures/enfants/années

Peux tu faire exactement comme cela ?

Je remercie encore pour ton aide

Amicalement

Bonjour

nicaise a écrit :

Peux tu faire exactement comme cela ?

Bien sûr ! Je peux au moins essayer :

Cela te convient-il ?

What else ?

Bye !

J'ai adapté et modifié ton dernier code pour obtenir ce que je voulais.

Le résultat est parfait et tout fonctionne parfaitement

UN GRAND MERCI POUR TON AIDE

J'ai beaucoup apprécié ta participation

A bientôt je l'espère, sur une question

Amicalement

Ci-joint le fichier final avec les bon codes

Rechercher des sujets similaires à "copie valeurs colonne conditions"