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,

Tout fonctionne.

Il reste à voir si tu as une idée pour:

"='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 ?

Sinon peut-être y aurait-il une autre méthode pour lier les deux cellules ?

E1 des feuilles numérotées avec la référence en feuille "Patients".

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

Salut,

je te propose cette solution (voir fichier joint) :

je ne copie plus la cellule E1 d'un feuillet vers un autre mais je modifie les valeurs du feuillet patients (en E1 de chaque feuillet on a la formule =Patients!Cx où x est la ligne où se trouve le nom de la chambre dans le feuillet patients)

Pour comprendre le code, je récupère le nom du feuillet qui correspond à mon champ listbox1 sélectionné, je recherche cette valeur dans le feuillet Patients et j'attribue à une variable PATIENT1 la valeur de la cellule à droite de la cellule cherchée, même chose pour la listbox2.
Lors du clic sur commandbutton, j'échange les valeurs (en gros cellule où se trouvait PATIENT1 est égal à PATIENT2 et inversement), la cellule E1 de "201" continuera à renvoyer la valeur C6 etc...

Deux impératifs pour que ça fonctionne : tous les noms des feuillets même transfert1 et 2 doivent se trouver en colonne B de Patients, tous les feuillets doivent avoir cette fameuse formule =Patients!Cx où x est la ligne où se trouve le nom de la chambre dans le feuillet patients

N'hésites pas si c'est pas clair (déjà moi je me comprends pas trop des fois😀)

A+
 

Pièces jointes

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

Bonsoir,

J'apprécie ton travail à sa juste valeur 🙂
Je comprends tes explications et je pense que c'est la bonne solution.

Je pense que le traitement, B4:L43, ne se copie pas dans les feuilles Transfert1 et Transfert2. A chaque mouvement vers ces feuilles, on le perd.

A+
 
Re : Transfert de données

OUPS la boulette,

j'ai oublié de modifier une ligne suite au changement de variable :

remplace dans la procédure Private Sub ListBox1_DblClick.....

cette ligne
Code:
Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Range("B4:L43").Cut Sheets([COLOR="Red"]FEUILLE[/COLOR]).Range("B4:L43")
par
Code:
Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Range("B4:L43").Cut Sheets([COLOR="red"]TRANSFERT[/COLOR]).Range("B4:L43")

A+
 
Re : Transfert de données

Bonjour ledzepfred,

Je ne suis pas encore capable d'appliquer ton code à un autre classeur. Je te joins la feuille "Patients" d'un classeur de travail, avec le code.
J'ai essayé de l'adapter, mais tout ce que je suis arrivé à faire, c'est visualiser les chambres dans la mauvaise listbox...................

Si tu veux bien regarder

A+
 

Pièces jointes

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

Salut,

tu t'appuyais sur la colonne B pour les réaffectations or tes recherches dans la feuille Patients doivent desormais se faire sur la colonne A.

ci-joint fichier modifié

Encore une dernière précision StP. J'ai deux autres feuilles, à ne pas faire apparaitre, comment modifier l'initialisation de l'userform:

Private Sub UserForm_Initialize()
ListBox1.Clear
ListBox2.Clear

For Each C In ActiveWorkbook.Sheets
If C.Name <> "Patients" Then
If C.Cells(1, 3) = 0 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, 3)
End If

End If
Next
End Sub

pour la feuille "BdD Médic" et "Identifiants"

Lorsque l'on ne sélectionne pas de chambre dans la liste des chambres libres, on a une erreur d'exécution, pourrait-on avoir un message "Vous n'avez pas sélectionné de chambres disponibles" et rester sur l'userform ?

Merci

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

RE Degap,

c'est normal!

Pour 203 F, tu n'as pas écrit 203 F dans la cellule du feuillet Patients mais 203 avec un format personnalisé qui complète la valeur par un F (pour t'en convaincre regarde le format de cette cellule (203 F) et ce qui est inscrit dans la barre de formule (203), résultat le code (.find qui est très sensible) qui cherche 203 F ne trouve pas cette référence dans la colonne A et c'est le bug.

Solution : compléter les valeurs par un F s'il y a lieu et mettre la colonne A en format standard.

a+
 
Re : Transfert de données

Bonjour, le forum, ledzepfred,

Tout est en place et fonctionne. Une chose reste à améliorer, c'est conserver la mise en page (cadre et bordure). J'ai utilisé Copy plutôt que Cut:
Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Range("B4:L43").Copy Sheets(TRANSFERT).Range("B4:L43").

Seules restent à vider les cellules de la feuille de départ.
J'ai essayé:
Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Range("B4:L43").Clear contents

Mais ce n'est pas bon.

A+
 
Re : Transfert de données

Bonjour, le forum, ledzepfred,

Tout est en place et fonctionne. Une chose reste à améliorer, c'est conserver la mise en page (cadre et bordure). J'ai utilisé Copy plutôt que Cut:
Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Range("B4:L43").Copy Sheets(TRANSFERT).Range("B4:L43").

Seules restent à vider les cellules de la feuille de départ.
J'ai essayé:
Sheets(ListBox1.List(ListBox1.ListIndex, 0)).Range("B4:L43").Clear contents

Mais ce n'est pas bon.

A+

C'est vrai que ClearContents en un seul mot c'est mieux................🙂
 
- 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

Retour