Couper et coller vers une autre feuille

Bonjour,

je vous sollicite pour améliorer l'enregistrement de mes interventions vétérinaires.

Onglet "medoc": la liste des médicaments utilisés

Onglet "pharmacie": la liste des médicaments en stock

Onglet "carnet sanitaire": la liste de traitements réalisés (qui quand comment avec quoi....)

Je voudrais au moyen de case à cocher sélectionner plusieurs médicaments de la "pharmacie".

Couper et coller ces lignes sélectionnées vers le "carnet sanitaire" pour n'avoir qu'à renseigner le n° de l'animal et la date de l'intervention.

Je vous remercie d'avance de l'aide que vous pourrez m'apporter.

74carnet-sanit.zip (257.91 Ko)

Salut,

Dans le fichier ci-joint, tu cliques dans la colonne A de la feuille PHARMACIE afin de choisir tes médicaments. Clique une case après l'autre et tout à la fin clique ailleurs dans le fichier ; les X nécessaires apparaitront les uns après les autres (un seul clic suffit, le X apparait lorsque tu sélectionnes une autre cellule ou lorsque tu cliques une deuxième fois sur la même cellule). Pour corriger une saisie incorrecte, clique à nouveau dans la case concernée. Il y a une petite habitude à prendre pour l'ensemble de cette utilisation, mais c'est plus simple que de devoir ajouter x cases à cocher. Avec mon système, si tu ajoutes ou retire des lignes de médicaments, la possibilité de cocher la colonne A ou non est adaptée en conséquence.

Quand c'est prêt, clique sur le bouton en place.

On peut surement faire plus simple et plus rapide, mais tu as au moins déjà un premier outil en main

Cordialement.

https://www.cjoint.com/c/CCqioV7Hf5g

Bonjour,

Dans la même optique qu'Yvouille une suggestion de simplification de son code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim o
If Target.Count = 1 Then
   Set o = Application.Intersect(Target, Range("A4:A" & Range("E3").End(4).Row))
   If Not o Is Nothing Then Target = IIf(Target = "", "X", "")
End If
End Sub

A+

Salut Galopin,

J'avais repris un code qui permettait d'inscrire d'abord X, puis Y, puis Z et puis "Vide" et l'ai tranformé pour Stephi. Est-ce pour cela qu'il est assez compliqué ?

Avec ton code - qui est effectivement bien plus simple, donc très intéressant - peux-tu également avoir une suite de valeurs identiques à celle indiquée ci-dessus ? Je pourrais bien entendu chercher moi-même, mais si tu as déjà la solution ......

Cordialement.

A l'intention de stephi :

Ne pas tenir compte de ce qui suit...


Bonjour Yvouille,

Hum... a question me semble sans objet ici : On est dans un Worksheet_SelectionChange donc on n'a pas à priori à évaluer le contenu (sauf à ajouter en plus une Private Sub Worksheet_Change...)

Le IIf implique un switch (Vrai/Faux) donc le test ne peux être que boolean et expressément adapté à cette situation.

Si on voulait absolument mettre une WorksheetChange en plus dans cette situation (pour éviter par exemple une saisie intempestive...) dans cette situation le même switch ferait parfaitement l'affaire.

Dans une toute autre situation comme celle que tu évoques, personnellement, j'aurais plutôt utilisé un select case (dans une fonction personnalisée) plus souple à mes yeux, plus lisible, tout aussi rapide que match et bien plus structurant :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim o, s$
If Target.Count = 1 Then
   s = Target
   Set o = Application.Intersect(Target, Range("A4:A" & Range("E3").End(4).Row))
   If Not o Is Nothing Then Target = MaFonctionPerso s
End If
End Sub

Private Function MaFonctionPerso$(s$)
Dim r$
Select Case s
Case "A": r = "Y"
Case "B": r = "Y"
Case "": r = "X"
End Select
MaFonctionPerso = r
End Function

Après on peut toujours discuter sur l'utilisation des Arrays, de Select Case, de l'optimisation des macros... hein ! mébon. Ceci est une autre discussion !

A+

Bonjour Yvouille et Galopin,

Merci pour le temps que vous consacrez à améliorer mon fichier, un problème subsiste:

Quand je valide mon choix de médicament dans la "pharmacie" les lignes sont correctement envoyées dans le "carnet sanitaire" mais elles ne disparaissent pas de "la pharmacie".

Cordialement

stephi :

Ton fichier est extraordinairement pollué. Un fichier presque vide comme le tien ne devrait peser que quelques ko.

Dès qu'on essaie de le dépolluer ou de le modifier ça plante tout.

De 2 choses l'une : ou c'est juste un fichier de démo et ce n'est pas grave pour peu que ton vrai fichier ne suive pas le même chemin...

Et si c'est ton vrai fichier juste allégé de quelques lignes c'est encore pire.

Personnellment je préconise de reconstituer un vrai fichier avec des normes un peu plus standart. Comme par exemple définir tes nombreuses plages de façon dynamique et éviter de formater 1 000 000 de lignes pour rien.

Je vais voir ce que je peux faire pour normaliser un peu ce fichier. A mon avis c'est la première chose à faire sur ce fichier...

A+

Bonsoir,

Je n'arrive pas à joindre un fichier correct : Toutes mes tentatives pour enregistrer vos fichiers rmodifiés même de façon minime se soldent par un plantage. Je crains que vous n'ayez rapidement une désagréable surprise avec ce fichier..

Néanmoins j'ai réussi à mettre au point une macro de tranfert correct.

Cette macro fonctionne avec une feuille "PHARMACIE" sans case à cocher c'est à dire sur l'hypothèse émise précédemment par Yvouille. (Cette histoire de case à cocher est complètement farfelue.)

Il suffit de la coller la macro dans un module Standart et de la raccorder au bouton qui se trouve dans la feuille "PHARMACIE"

Sub Transfert()
Dim i%, ii%, k%, Tablo, WsC As Worksheet
Set WsC = Worksheets("CARNET SANITAIRE")
WsC.Protect UserInterfaceOnly:=True
k = WsC.Range("F3").End(4).Row + 1
i = Range("F3").End(4).Row
For ii = i To 4 Step -1
   If Cells(ii, 1) = "X" Then
      Tablo = Range(Cells(ii, 2), Cells(ii, 27))
      WsC.Range(WsC.Cells(k, 2), WsC.Cells(k, 27)) = Tablo
      k = k + 1
      Rows(ii).Delete
   End If
Next
End Sub

Nota : Il est supposé que la feuille "CARNET SANITAIRE" est protégée sans mot de passe.

A+

Salut Galopin et merci pour ton explication.

Salut Stephi, je te laisse entre de bonnes mains

Bonjour galopin,

Ton code "transfert" à très bien fonctionné. (oui oublié les cases à cocher)

J'ai considérablement allégé le fichier en enlevant les formules matricielles sur les medocs et leur utilisations.

Je vais cherché une autre façon de les trier.

Pour le moment, j'ai voudrais pouvoir afficher un calendrier en double-click sur des cases "dates" mais je n'arrive pas à trouver

la solution : c'est le recopiage des lignes vers le bas qui me pose problème. (voir feuille "carnet sanitaire").

Si galopin ou quelqu'un d'autre à une solution je suis preneur,

cordialement

59carnet-san-v8.xlsm (74.01 Ko)

Bonjour,

Hum... DoubleClick pas glop !

Je te l'ai fait sur selection_change : Le principe, serait le même sur double-clic mais avec beaucoup plus de complications.

J'ai modifié aussi le initialize mais en fait c'était inutile il suffit de mettre la propriété Left du USF à 200

Tu me dis.

Nota : "Calendrier" aurait bien suffit pour le nom du USF. Il faut absolument éviter les noms tarabiscotés et à rallonge. dans tous les cas 7 ou 8 caractères devraient être bien suffisant.

33carnet-san-vg.xlsm (70.68 Ko)
Rechercher des sujets similaires à "couper coller feuille"