Tableau excel Liaison ou pas? - Logiciels - Windows & Software
Marsh Posté le 19-09-2008 à 07:40:41
Bonjour,
voici une macro qui fait passer de Feuil1 à Feuil2 et inversement. mettre la macro dans un module de vba.
Sub transf()
'
' transf Macro
' enregistrée le 19/09/2008 par SENIORPAPOU
' on suppose que la feuille1 s'appelle Feuil1 et l'autre Feuil2
'
Dim ssdep As Worksheet
Dim ssariv As Worksheet
Set ssdep = ActiveSheet
Selection.EntireRow.Select
Selection.Cut
If ActiveSheet.Name = "Feuil1" Then
Set ssariv = Sheets("Feuil2" )
Else
Set ssariv = Sheets("Feuil1" )
End If
ssariv.Select
Range("a1" ).EntireRow.Select
Selection.Insert Shift:=xlDown
ssdep.Select
Selection.Delete Shift:=xlUp
End Sub
fonctionnement: sélectionner la ligne ou une cellule de la ligne à faire passer, lancer la macro.
Si tu débutes vraiment on pourra installer ensemble la macro.
Marsh Posté le 19-09-2008 à 15:22:30
Débutant en HFR aussi... il existe un topic dédié à Excel (cf signature)... merci !
Sinon, en effet, le seul moyen est de passer par une macro comme indiqué...
Ensuite, reste à l'adapter pour vraiment répondre à ton souci... il faudra que ça ajoute la ligne "à la fin" de ta feuille 2 je suppose (à moins que tu aies un classement par date ?)... etc...
Marsh Posté le 19-09-2008 à 19:54:03
Merci pour vos répenses.
Oui je suis vraiment débutant. donc t'as parlé d'un module, mais je ne sais pas comment passer à un module vba.
et comme t'as suggeré, je préfère bien que tu m'aide à l'installer je t'en serais très reconnaissant.
ps: je suis sous excel 2007.
Marsh Posté le 19-09-2008 à 21:15:29
safeman993 a écrit : Merci pour vos répenses. |
Marsh Posté le 19-09-2008 à 21:29:55
Bonsoir,
on peut traîter le clic sur la cellule de la colonne "terminé" de la ligne à passer ou
mettre un bouton de commande dans chaque feuille et lui attacher la macro.
Je te détaille demain si tu ne réussis pas
Cordialement
edit: l'utilisation de "figer les volets" permet de garder le bouton de commande en haut de l'écran si on lui réserve la première ligne.
Marsh Posté le 19-09-2008 à 23:07:48
seniorpapou a écrit : Bonsoir, |
Franchement, un grand merci SeniorPapou, je viens de créer un boutton que j'ai nommé "Terminer" dans Feuil1 A1, puis j'ai coller la macro dans la page du code. Jai fait la même chose dans Feuil2 avec un boutton "Annuler" j' y ai collé la macro, puis inversé l'ordre des Feuil dans le code espèrant que cela marchera et ça a marché youpi. merci qui ?
Merci Seniorpapou biensur.
Maintenant je peux selectionner une entrée cliquer sur terminer et la ligne entière passe dans la Feuil2. Si par erreur je clique sur ligne qui est encore en cours, il suffit de cliquer sur Annuler pour la ligne retrouve sa place dans la feuil1.
Il me faut juste trouver comment respecter l'ordre des dates (ordre chronologique) dans les deux feuilles.
Est ce que je peux te demander si tu peux me commenter le code que je puisse comprendre ce que chaque ligne fait exactement.
encore une fois chapeau
Marsh Posté le 20-09-2008 à 07:34:04
pour le classement par date, tu peux t'inspirer de ceci:
Dim ssdep As Worksheet
Dim ssariv As Worksheet
Dim repos As Double
repos = Selection.Row
Set ssdep = ActiveSheet
Selection.EntireRow.Select
Selection.Cut
If ActiveSheet.Name = "Feuil1" Then
Set ssariv = Sheets("Feuil2" )
Else
Set ssariv = Sheets("Feuil1" )
End If
ssariv.Select
Range("a1" ).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.Sort Key1:=Range("A2" ), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A2" ).select
ssdep.Select
Selection.Delete Shift:=xlUp
Cells.Select
Selection.Sort Key1:=Range("A2" ), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
cells(repos,1).select
Marsh Posté le 20-09-2008 à 09:30:06
Bonjour,
pour l'explication des lignes de code, tu vas su vba, tu sélectionne un "mot", puis F1.
par exemple tu prends "set" puis F1.
dans cette page d'aide, tu auras dans "voir aussi", l'explication de dim
______________________
Selection.EntireRow.Select
Selection.Cut
pour ces deux lignes, on suppose (et c'est risqué **) que l'on a sélectionné une cellule de la bonne ligne à transférer, et on sélectionne la ligne entière. Puis on coupe.
___________________________________________
If ActiveSheet.Name = "Feuil1"
Activesheet.name donne le nom de la feuille "sur laquelle on est au moment de l'appel à la macro".
si la feuille en cours (ssdep) s'appelle "Feuil1", je définis la référence à l'objet feuille destination (ssariv) comme étant "Feuil2" ,
si la feuille en cours (ssdep) s'appelle "Feuil2", je définis la référence à l'objet feuille destination(ssariv) comme étant "Feuil1" .
___________________________________
Selection.Insert Shift:=xlDown
pour insérer ce qui a été copié, en décalant vers le bas..
Selection.Delete Shift:=xlUp
pour supprimer la ligne, en décalant vers le haut les lignes qui sont en dessous.
_____________________________
** puisque c'est risqué on pourrait demander confirmation du déplacement avant de le réaliser
Cordialement
Marsh Posté le 20-09-2008 à 09:40:11
Merci beaucoup senirpapou et à travers toi à tous ceux qui fournissent leurs aides sur le fourm-hardware.
je vais essayer tout ça et peut être à une prochaine fois.
Marsh Posté le 20-09-2008 à 11:24:40
Voilà à quoi ressemble maintenant (ma) macro :
Sub Bouton1_Clic()
'
' transf Macro
' enregistrée le 19/09/2008 par SENIORPAPOU
' on suppose que la feuille1 s'appelle Feuil1 et l'autre Feuil2
'
Dim ssdep As Worksheet
Dim ssariv As Worksheet
Dim repos As Double
repos = Selection.Row
Set ssdep = ActiveSheet
Selection.EntireRow.Select
Selection.Cut
If ActiveSheet.Name = "Feuil1" Then
Set ssariv = Sheets("Feuil2" )
Else
Set ssariv = Sheets("Feuil1" )
End If
ssariv.Select
Range("a2" ).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.Sort Key1:=Range("A2" ), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A2" ).Select
ssdep.Select
Selection.Delete Shift:=xlUp
End Sub
_______________________________________________________
Sub Feuil2_Bouton1_Clic()
'
' transf Macro
' enregistrée le 19/09/2008 par SENIORPAPOU
' on suppose que la feuille1 s'appelle Feuil1 et l'autre Feuil2
'
Dim ssdep As Worksheet
Dim ssariv As Worksheet
Dim repos As Double
repos = Selection.Row
Set ssdep = ActiveSheet
Selection.EntireRow.Select
Selection.Cut
If ActiveSheet.Name = "Feuil2" Then
Set ssariv = Sheets("Feuil1" )
Else
Set ssariv = Sheets("Feuil2" )
End If
ssariv.Select
Range("a2" ).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.Sort Key1:=Range("A2" ), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A2" ).Select
ssdep.Select
Selection.Delete Shift:=xlUp
End Sub
j'ai utilisé le tri par date, mais comme ça selectionne la ligne entière, je ne risque pas de perdre les autres champs sur la même ligne pendant le transfer.
le tri comme t'as remarqué s'opére juste à l'insertion, vu que je rentre mes commande au jour le jour. donc pas besoin de trier la colone une fois la commande supprimée. les lignes se déplace vers le haut dans la Feuil1 en respectant l'ordre.
c'est très instructif. Et moi qui utilisais excel tout bpetement comme une feuille de papier, je crois que j'ai trouvé le moyen de mieu l'utiliser maintenant. si t'as des liens de vulgarisation du VBA je suis prenneur (biensur j'ai déjà commencé ma recherche sur google.
merci mille fois.
Marsh Posté le 20-09-2008 à 12:49:01
Bonjour,
les séquences:
If ActiveSheet.Name = "Feuil2" Then
Set ssariv = Sheets("Feuil1" )
Else
Set ssariv = Sheets("Feuil2" )
End If
et:
If ActiveSheet.Name = "Feuil1" Then
Set ssariv = Sheets("Feuil2" )
Else
Set ssariv = Sheets("Feuil1" )
End If
donnant strictement le même résultat, tu pouvais te contenter d'appeler une macro commune placée dans un module ce qui évite de retapper les modifs s'il y en a sur chacunes des macros avec les risques d'erreur que cela induit.
Félicitations pour tes facultés d'adaptation.
pour les liens, je vais voir, j'espère que d'autres pourrons t'en donner.
Citation : je ne risque pas de perdre les autres champs sur la même ligne pendant le transfer. |
je n'ai pas compris ce que tu veux dire dans la ligne ci-dessus
EDIT: pour voir un peu de VBA sous excel, tu peux commencer par enregistrer des macros et regarder le code qui est généré.
http://www.info-3000.com/vbvba/
http://www.cathyastuce.com/index.p [...] &topics=16
http://vb.developpez.com/faqvba/
Marsh Posté le 20-09-2008 à 19:29:05
seniorpapou a écrit : Bonjour,
|
Puique je n'ai pas encore tout assimilé, je préfère garder ce code telquel que de courir le risque de me mélanger les pinceaux.
Citation :
|
je voulais dire par champs le cellules qui comprtent autres éléments comme n°art client type de cde. ...etc qui sont sur le même ligne.
avant pour mettre les datent dans le bon ordre je selection la colone date puis tri là excel me propose d'étandre la selection pour inclure les autres cellules. voilà ce je voulais dire.
merci pour les liens.
Marsh Posté le 21-09-2008 à 14:31:54
safeman993 a écrit :
|
Désolé... mais, c'est sensé être plus compréhensible là ??? Ne serait-il pas possible de relire avant de poster, d'utiliser la ponctuation, de rajouter tous les mots à la phrase, de corriger les coquilles.... merci.
Marsh Posté le 17-09-2008 à 23:50:59
Bonojur à tous
J'ai lu pas mal de sujets concernant les tableaux dans excel; malheureusement je n'ai pas trouvé un sujet qui peut m'aider un régler mon problème.
voila, j'ai un tableau excel où je stock les article en attente de traitement. mon tableau ressemble en quelque sort à ceci :
_______________________________
date | N° art | Client | .....
____ ____________________________
je voudrais faire en sorte que chaque fois qu'un article est traité (avec une case à cocher lébéllée "terminé" ), la ligne disparaît de la feuille1 et apparait dans la feuille2 dans un tableau similaire
Juste une petite différence (en cas d'erreur), un bouton ou une case à cocher dans le 2ème tableau peut remettre la ligne supprimée à sa place dans le premier tableau.
j'espère que j'ai bien exposé mon problème. je vous remercie pour toutes vous suggestions.
ps
je suis plus que débutant dans excel, actullement je barre les lignes qui sont traités, et c'est très moche.