Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Transfert de données

  • Initiateur de la discussion Initiateur de la discussion degap05
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

degap05

XLDnaute Impliqué
Bonjour,

J'ai besoin d'aide.

Dans le fichier joint:
-1 feuille "Noms", qui indique l'affectation d'un nom à une feuille
-les feuilles suivantes portant un numéro correspondant, qui héberge un nom en C1 et des données sur la plage B4:L43
-1 feuille "Transfert".

Le but recherché. Tout en restant sur la feuille active (celles qui portent un numéro), appeler l'userform, choisir le nom qui correspond à la feuille ou l'on se trouve. Envoyer le nom en C1 de la feuille "Transfert", copier la plage B4:L43 sur la feuille "Transfert", changer de feuille avec userform ouvert et copier toutes les données de la feuille transfert sur la nouvelle feuille.

Merci de votre attention
 

Pièces jointes

Re : Transfert de données

Bonjour Degap05,

Un fichier exemple, explication détaillé : parfait 🙂

Mais comme il faut tout faire, besoin de plus de d'informations!

Utilise l'enregistreur de macro, et si tu bloque à ce moment, avec ton code, on verra mieux ce que tu veux!

Seul parti non faisable avec l'enregistreur de macro :
degap05 à dit:
Tout en restant sur la feuille active...
-> méthode 1 : si tu fais ta macro sans sélectionner les cellules et feuille, pas de soucis
-> méthode 2 :
* mettre ce code :
Code:
Application.ScreenUpdating = False
Au début du code à partir duquel tu ne veux pas que l'affichage de ton écran change (même lorsque ta macro te fais aller sur d'autres onglets, copier, coller, ...)

* mettre à la fin de la zone le code suivant :
Code:
Application.ScreenUpdating = True

degap05 à dit:
changer de feuille avec userform ouvert
Rien de particulier à faire, cela se fait naturellement si tu mets :
Code:
Sheets("...").select
Sauf si bien sûr tu as utiliser juste avant le code :
Code:
Application.ScreenUpdating = False

Bonne soirée
 
Re : Transfert de données

Bonsoir,
je ne suis pas tout à fait d'accord🙁.
J'ai quand même positionné l'userform, qui sélectionne les noms, qui envoi le nom en feuille transfert. Plus les macros qui copient actionnées avec les boutons sur l'userform.

OK c'est pas grand-chose.

Mais aprés .............

A+
 
Informations manquantes

Bonsoir Degap05,

Tout d'abord, en effet tu as déjà fais pas mal, mais il me manquait deux informations (que j'aurais pu avoir grâce à ce fameux code) :

degap05 à dit:
changer de feuille avec userform ouvert

Pour aller sur quelle feuille? La feuille "Transfert"?

degap05 à dit:
et copier toutes les données de la feuille transfert sur la nouvelle feuille

Comment veux-tu l'appeler cette nouvelle feuille?

En attendant tes réponses, je finis de simplifier ton code et enlever les redondances inutiles.

A tout à l'heure.
 
Re : Transfert de données

bonsoir degap, excel lent,

degap : tes procédures copy et copyreverse peuvent être simplifiées:

Code:
Sub Copy()
Range("B4:L43", "c1").Copy Sheets("Transfert").Range("B4:L43", "c1")
'Sheets("Noms").Activate
End Sub
Sub CopyReverse()
Sheets("Transfert").Range("B4:L43", "c1").Cut Range("b4:l43", "c1")
'Sheets("Noms").Activate
End Sub

Dans ce cas, inutile de mettre screenupdating= false en début de code puisqu'il n'y a pas de changement de feuillet
pour info, il est inutile de placer screenupdating= true en fin de macro, cette propriété repasse à True automatiquement après le End Sub

pour pouvoir se déplacer d'une feuille à l'autre tout en gardant ll'USF ouvert mettre la propriété showmodal sur valeur False

Pour le reste j'ai pas tout compris

a+
 
Dernière édition:
Re : Transfert de données

Bojour Excel-lent, ledzepfred,

Merci de vos réponses,

changer de feuille avec userform ouvert


Passer d'une feuille portant un numéro à une autre feuille portant un numéro.

et copier toutes les données de la feuille transfert sur la nouvelle feuille

La feuille portant un autre numéro, que l'on vient de choisir.

En fait, pour plus d'explications:

Il s'agit, au départ, avant cette procédure, d'affecter un patient à une chambre d'hospitalisation (son nom s'inscrit en C1 des feuilles numérotées).
Je fais ceci avec "=Noms!B7" en cellule C1, entre la feuille "Noms" et les feuilles portant un numéro. On inscrit ensuite son traitement en plage (B4:L43), cela fonctionne déjà.

En cours d'hospitalisation, il se produit souvent des changements de chambre.
Dès lors, il faut réaffecter le patient et son traitement à une nouvelle chambre. En ne prenant en compte que la cellule C1 et la plage B4:L43.

Il faudrait, au préalable au transfert, vérifier que la nouvelle chambre est disponible (feuille numérotée vide en C1 et en plage B4:L43). Il faudrait également que l'inscription des données n'efface pas la formule "=Noms!B7" en cellule C1.

Voilà, vous savez tout !

Merci.
 
Re : Transfert de données

Bonjour le forum,

J'ai continué à progresser et j'ai mis en place un petit système qui me permet de faire ce que j'expliquais dans mon message précédent.

Cependant j'aurais besoin de votre aide pour ne pas voir apparaitre les feuilles "Transfert1" et "Transfert2" dans la listview. Elles sont en dernières positions.

De même, je ne voudrais copier que les informations de la cellule C1 et de la plage B4:L43 et je n'y arrive pas.

Mon système est vraiment rudimentaire, n'hésitez pas à le modifier.

Merci de votre aide.
 

Pièces jointes

Re : Transfert de données

salut degap, excel-lent,

pour éviter que transfert 1 et 2 se retoruve dans la listbox, essayes ceci :

Code:
Private Sub UserForm_Initialize()
For Each C In ActiveWorkbook.sheets
       [COLOR="Red"]If Left(C.Name, 9) <> "Transfert" Then [/COLOR]ListBox1.AddItem C.Name
    Next
CommandButton2.Enabled = False
CommandButton3.Enabled = False
End Sub

Pour ne copier que les infos de C1 et B4:L43, il faut le faire en deux fois:
Code:
sheets("Transfert2").Range("C1").Copy Range("C1")
sheets("Transfert2").Range("B4:L43").Copy Range("B4:L43")
Si je peux me permettre, il y aurait une solution plus simple : créer dexu listbox :
-1 pour les chambres affectées
-1 autre pour les chambres non affectées
On établit qu'une chambre est afectée ou non par rapport à la valeur C1 d'une feuille.

Pour transferer un patient on sélectionne sa chambre dans la première listbox et on clique sur sa nouvelle chambre dans la deuxième, une validation par commandbutton et hop le transfert est fait 'sans utiliser un feuillet de transfert) et les listbox se réinitialise, en gros tu utiliserais un feuillet transfert uniquement quand toutes les chambres sont affectées

Qu'en dis-tu?

A+
 
Dernière édition:
Re : Transfert de données

Bonjour le forum, ledzepfred,

Je vois que tu as parfaitement compris. J'étais parti dans cette solution compte tenu de mes capacités limitées et que c'était le plus facile à faire.
En effet il y a deux cas:
-on transfère dans une chambre vide,
-toutes les chambres sont occupées et il faut faire un chassé-croisé. On libère les chambres et on ré-affecte.

Je suis pour ta solution, mais je ne saurais pas la réaliser😱


Merci pour ta réflexion.

A+
 
Re : Transfert de données

bonsoir,

à l'impossible nul n'est tenu mais à coeur vaillant rien d'impossible!!!!
Donc on se reprend...
Poste un nouveau fichier avec simplement trois feuilles correspondant à deux chambres affectées et une chambre vide (prend des exemples très concrets et respectent toutes les saisies) ainsi que ton USF actuel

Il suffira simplement d'y inclure une deuxième listbox et de correctement les initialiser dans l'initialize du USF, on conservera un seul bouton qui proposera l'affectation d'un patient dans une chambre vide ou si elles sont toutes affectées alors affectation dans une feuille de transfert.

A toi de jouer et je te filerai un coup de main

a+
 
Re : Transfert de données

re...

vois si le fichier joint répond à ton besoin (j'avais un peu de temps)

- dans la première listbox : en plus du n° de chambre tu as le nom du patient qui y est affecté
- dans la deuxième : uniquement les chambres vides
- les feuilles transfert1 et transfert2 ne sont présentes dans la listbox1 que si elles sont affectées, si elles sont vides elles n'apparaissent pas dans la listbox2
- pour faire un changement de chambre, selectionner la chambre affectée et une chambre vide et clique sur transfert
- pour affecter un patient à une chambre de transfert (si aucune chambre vide par exemple mais c'est pas figé), il suffit de double cliquer sur une chambre dans la listbox1
- si les deux chambres de transfert sont affectées, le double clic est inopérant

si tu ne comprends pas le code n'hésites pas
a+
 

Pièces jointes

Dernière édition:
Re : Transfert de données

Ledzepfred,

Que te dire, devant ce travail ? Admiration complète !!!

Comme tes compétences te le permettent, tu es allé bien au bout de la démarche.
Je vais installer ta solution sur le fichier du service de soins dès cet après-midi.
Il faudrait que la chambre soit considérée comme vide si dans la cellule (E) ou se trouve le nom est inscrit zéro. En effet j'ai une feuille récapitulative "Patients", avec le numéro des chambres et les noms affectés. Jusqu'à maintenant c'est sur celle-ci que les noms de patients sont mis à jour, avec la formule "='Patients'!B5", dans le champ E, qui renvoi un zéro si la chambre est vide.
Que propose-tu pour que la formule reste en cohérence avec le numéro de l'onglet ? En effet lors du transfert, la formule ne se ré-actualise pas.
Quel paramètre dois-je modifier pour adapter au nombre de chambres :

If IsEmpty(C.Cells(1, 5)) Then
If Left(C.Name, 9) <> "Transfert" Then ListBox2.AddItem C.Name
Else: ListBox1.AddItem C.Name
ListBox1.List(ListBox1.ListCount - 1, 1) = C.Cells(1, 5)

Si tu veux personnaliser l'userform avec ton logo favori et le nom du forum, je serais heureux de l'installer sur le fichier du service de soins.

Merci pour ce cadeau.
 
Dernière édition:
Re : Transfert de données

salut,

Merci pour ton compliment que je trouve particulièrement disproportionné dans la mesure où c'est la deuxième ou troisième fois que mon chemin croise les listbox (j'apprends encore) mais ça fait plaisir et en tout cas ravi que cela te convienne.

concernant le fait qu'en E1 on a une formule il faut remplacer la condition
Code:
 If IsEmpty(C.Cells(1, 5)) Then
par
Code:
 If IsNull(C.Cells(1, 5)) Then
(à tester)

pour la mise à jour de cette formule, il faut ajouter dans le code du bouton le changement d'affectation de la chambre.
Remets un fichier complet avec notamment ta feuille recap pour que je puisse mieux visualiser.
 
Re : Transfert de données

re,
Belle mise en forme, c'est plus convivial comme ça
pour l'ajout de feuilles, il faut le faire à la main et dans un premier temps elles seront vides.
Pour éviter le feuillet patients dans la listbox, il fallait simplement ajouter une condition
Code:
 if c.name<> "Patients" then
Pour la traduction de E1=0, ben faisons simple :
Code:
if C.cells(1,5) = 0 then

Pour la mise à jour du feuillet Patients je ne pourrais regarder que demain et peut-être que le soir.

Ci-joint, fichier modifié

a+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…