Macro excel
Résolu
Bonjour à tous, je voudrai réaliser un outil de gestion via excel, jusque la pour le tableau pas de problème mais pour la macro aïe....
Je vous le donne en français si quelqu'un pouvais me le traduire en VBA parceque la je rame et c'est assez urgent.
j'ai deux feuilles l'une qui sera rempli par les personnes concernées et l'autre pour archiver qui sera en lecture seule sauf pour la macro bien sur.
Ce que je souhaiterai c'est une macro qui quand elle apercois dans la feuille 1 le mot "achevée" dans la colonne M mais sur n'importe quelle ligne
copie la ligne dans l'autre feuille sur la première ligne vide disponible, supprime la ligne dans la feuille numéro 1, puis inscrit la date de modification dans la colonne N de la 2ème feuille
il y'a une autre condition aussi les colonnes de la feuille 2 ne coresponde pas exactement à la feuille 1 c'est a dire il faut qu'elle copie: colonne I vers G; J vers H; K vers I; L vers J; N vers K; O vers L; P vers M puis ajoute la date de modification dans la colonne N. De A à F les deux feuilles ont les même colonnes.
Voilà j'espère que ce sera assez compréhensible pour vous je débute dans excel et j'ai beau regarder sur les forum je n'arrive pas à trouver la solution peux être aussi ce n'est pas possible mais je ne suis pas convaincu. Si c'est le cas merci de m'avertir.
Merci d'avance pour votre aide elle m'a souvent été précieuse.
Je vous le donne en français si quelqu'un pouvais me le traduire en VBA parceque la je rame et c'est assez urgent.
j'ai deux feuilles l'une qui sera rempli par les personnes concernées et l'autre pour archiver qui sera en lecture seule sauf pour la macro bien sur.
Ce que je souhaiterai c'est une macro qui quand elle apercois dans la feuille 1 le mot "achevée" dans la colonne M mais sur n'importe quelle ligne
copie la ligne dans l'autre feuille sur la première ligne vide disponible, supprime la ligne dans la feuille numéro 1, puis inscrit la date de modification dans la colonne N de la 2ème feuille
il y'a une autre condition aussi les colonnes de la feuille 2 ne coresponde pas exactement à la feuille 1 c'est a dire il faut qu'elle copie: colonne I vers G; J vers H; K vers I; L vers J; N vers K; O vers L; P vers M puis ajoute la date de modification dans la colonne N. De A à F les deux feuilles ont les même colonnes.
Voilà j'espère que ce sera assez compréhensible pour vous je débute dans excel et j'ai beau regarder sur les forum je n'arrive pas à trouver la solution peux être aussi ce n'est pas possible mais je ne suis pas convaincu. Si c'est le cas merci de m'avertir.
Merci d'avance pour votre aide elle m'a souvent été précieuse.
Configuration: Windows XP Internet Explorer 6.0
23 réponses
-
ContributeurBonjour,
Désolé de n'avoir pu te répondre mais je vois que tu y es arrivé tout seul. C'est bien.
En fait le .unprotect et .protect ne doivent pas etre necessaires pour toi.
J'avais été dérangé en te repondant et j'ai du faire une compil de 2 discussions...
N'oublie pas de mettre résolu stp
eric -
c'est bon les gars je suis parvenu à mes fin et ca fonctionne nikel ca donne ca:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 17).Value = "ok" Then
Dim lig As Long
Sheets("archive").Select
ActiveSheet.Unprotect
With Sheets("archive")
lig = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1
.Cells(lig, 1).Resize(1, 6).Value = Cells(Target.Row, 1).Resize(1, 6).Value
.Cells(lig, 7).Resize(1, 4).Value = Cells(Target.Row, 9).Resize(1, 4).Value
.Cells(lig, 11).Resize(1, 3).Value = Cells(Target.Row, 14).Resize(1, 3).Value
.Cells(lig, 14).Resize(1, 1).Value = Date
Cells(Target.Row, 1).EntireRow.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True
ActiveWorkbook.Save
End With
End If
End Sub
et une macro pour le trie de la feuille archive par numéro avec un raccourci dans la barre d'outil:
Option Explicit
Sub trier_par_numéro_de_commande__Ctrl_t()
'
' trier_par_numéro_de_commande__Ctrl_t Macro
' Macro enregistrée le 18/10/2007 par a672700
'
' Touche de raccourci du clavier: Ctrl+t
'
ActiveSheet.Unprotect
Cells.Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A2").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True
End Sub
Merci beaucoup pour votre aide à charge de revanche.
A+ -
sinon je n'arrive pas à le faire fonctionner avec activate
-
j'ai réussi à l'intégrer dans le code ca donne:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 17).Value = "ok" Then
Dim lig As Long
Sheets("archive").Select
ActiveSheet.Unprotect
With Sheets("archive")
lig = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1
.Cells(lig, 1).Resize(1, 6).Value = Cells(Target.Row, 1).Resize(1, 6).Value
.Cells(lig, 7).Resize(1, 4).Value = Cells(Target.Row, 9).Resize(1, 4).Value
.Cells(lig, 11).Resize(1, 3).Value = Cells(Target.Row, 14).Resize(1, 3).Value
.Cells(lig, 14).Resize(1, 1).Value = Date
Cells(Target.Row, 1).EntireRow.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True
End With
End If
End Sub
mais il demande le code pour dévérouiller mais pas pour vérouiller comment je peux faire pour qu'il rentre le code automatiquement? -
bonjour ericcc comment voit-on le numéro du tableau dynamique
-
non mais je ne veux pas me spécialiser dans le développement mais dans la maintenance informatique pour aider les novices réparer les pc et tout
-
Technicien de maintenance informatique n'est peut pas le bon choix pour faire du développement ... >>°^°<<
-
je vais essayé ca demain la j'ai pas d'excel sius la main, merci je vais essayé l'enregistrement parce que la dernière partie de ton message n'est pas très clair à mes yeux j'ai vraiment du mal avec le language informatique et l'anglais c'est pourquoi je me lance dans cet formation de technicien de maintenance informatique
je vais quand même essayé de comprendre ton message demain sur gogole mais comme j'ai déjà dit il y'à beaucoup trop de chose à lire pour rien alors qu'une simple explication de base corespondrai mieux aux attente de tous je sais pas si tu vois ce que je veux dire un site d'exemple le site du zero certe peu enrichie pour le moment mais c'est parceque la présentation est mal faite ce qu'il faut c'est un tuto pour les bases et des sous forum pour les à coté:"paramétrage, utilisation, problème fréquement rencontré, forum problème et forum discussion et ca classé par type comme dans "CCM" tu vois le genre
bon je te tiens au courant
A + -
ContributeurPour la protection:
en début de macro déprotèger la feuille :
ActiveSheet.Unprotect
en fin de macro re-protéger
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Ces actions sont facile a retrouver en enregistrant une macro par 'outils / macro / nouvelle macro' sans oublier d'arreter l'enregistrement une fois les actions faites. Il suffit ensuite d'aller dans le module et recuperer les lignes interessantes
Comme ça tu peux retrouver comment rafraichir le TCD. Chez moi c'est : ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotCache.Refresh (si tu reprends sur un classeur neuf le tien devrait s'appeler Tableau croisé dynamique1").
A mettre, après reflexion, dans l'evenement activate de ta feuille du TCD.
Clic-droit sur 'longlet de cette feuille, 'visualiser le code. En haut 2 listes déroulantes, celle de gauche choisir 'worksheet', celle de droite choisir 'activate' et coller la ligne ...refresh pour obtenir :
Private Sub Worksheet_Activate()
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotCache.Refresh
End Sub
en remplaçant 4 par le bon n°
eric -
tu sais quoi tu m'a éclairer sur un bon point et dis comme ca ca vaut bien mieux que les cours qui nous embrouille sur le net
je suis parvenu a mes fin grace a vous les gars merci beaucoup et en plus grace a vos conseil je comprend un peu mieux le VB
il ne me manque plus que la dernière chose protéger en écriture la feuille2 sauf pour la macro est ce que c'est faisable?
je vais quand même me renseigner sur le net bien sur mais si vous avez la réponse n'hésiter pas
(désolé pour les fautes d'orthographe) -
ContributeurBonjour,
.cells(ligne,colonne) te défini la position de la 1ere cellule concernée
.resize(ligne, colonne) te défini la taille de la zone. Par exemple .Resize(1, 4) te sélectionne 1 ligne sur 4 colonnes.
Adapte en fonction de tes besoin.
Pour la 1ère ligne sautée soit tu t'embetes à tester si c'est la 1ere sauvegarde et tu ne fais pas le +1 dans lig = ...., soit tu en profites pour mettre un nom en tete de colonne à chaque champ
eric -
je vous redonne le code actuel:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 17).Value = "ok" Then
Dim lig As Long
With Sheets("archive")
lig = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1
.Cells(lig, 1).Resize(1, 6).Value = Cells(Target.Row, 1).Resize(1, 6).Value
.Cells(lig, 7).Resize(1, 4).Value = Cells(Target.Row, 9).Resize(1, 4).Value
.Cells(lig, 11).Resize(1, 3).Value = Cells(Target.Row, 14).Resize(1, 3).Value
.Cells(lig, 14).Resize(1, 3).Value = Date
Cells(Target.Row, 1).EntireRow.Delete
End With
End If
End Sub -
rectification il ne saute pas une ligne à chaque fois mais il le fais pour la première ligne que j'archive?
-
ah oui j'ai oublié la commande me copie bien la ligne sur une ligne vierge mais a chaque fois il y'a un saut d'une ligne
-
y'à du nouveau c'est ok pour pratiquement toute la commande seulement il me copie bien la date dans la colonne N mais il me la mais aussi sur la O et la P ca ne me serre pas a grand chose d'avoir trois fois la date lol
ensuite j'aurai voulu que la feuille sois protéger en écriture mais pas pour la macro c'est possible?
Merci Eric et gbinforme pour votre aide, vous assurez!!! -
ContributeurTu as remplacé sel par target, il faut le remplacer partout
eric -
c'est bon j'ai compris déjà pourquoi je galéré je ne rentré pas le code au bon endroit maintenant j'ai fait ca:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 17).Value = "ok" Then
Dim lig As Long
With Sheets("archive")
lig = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1
.Cells(lig, 1).Resize(1, 6).Value = Cells(sel.Row, 1).Resize(1, 6).Value
.Cells(lig, 7).Resize(1, 4).Value = Cells(sel.Row, 9).Resize(1, 4).Value
.Cells(lig, 11).Resize(1, 3).Value = Cells(sel.Row, 14).Resize(1, 3).Value
.Cells(lig, 14).Resize(1, 3).Value = Date
Cells(sel.Row, 1).EntireRow.Delete
End With
End If
End Sub
Donc quand je l'essai j'ai un message d'erreur "erreur de compilation: variable non définie"
je fais ok la ligne private...... se met en jaune et sur la ligne .Cell(lig,1)....... sel est sélectionné
j'espère que j'ai été clair et que quelqu'un pourra m'aidé aussi
merci -
très bien alors je ne demande qu'à comprendre ça me fait pareil:
alors d'abord quand je crée une macro via VBA il lui faut un nom je dois mettre ce que je veux ou "Worksheet_Change"?
en gros à quoi corespond la première ligne que tu me donnes? c'est quoi private?
quand je rentre un nom VBA me met automatiquement la première ligne "Sub nom de la macro ()" est ce que je dois la remplacer par la tienne?
Trop de question et malheuresement pas de réponse sur les forums je sais que ca doit etre simple mais cette macro je ne l'ai trouvé exposer dans aucun forum et pourtant j'ai cherché.
Merci encore pour votre aide -
ContributeurBonjour,
le début doit plutôt ressembler à ça:
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 13).Value = "achevée" Then
eric -
Sub Worksheet_Change()
If Cells(sel.Row, 13).Value = "achevée" Then
Dim lig As Long
With Sheets("archive des commandes cloturées")
lig = .Cells.SpecialCells(xlCellTypeLastCell).Row + 1
.Cells(lig, 1).Resize(1, 6).Value = Cells(sel.Row, 1).Resize(1, 6).Value
.Cells(lig, 7).Resize(1, 4).Value = Cells(sel.Row, 9).Resize(1, 4).Value
.Cells(lig, 11).Resize(1, 3).Value = Cells(sel.Row, 14).Resize(1, 3).Value
.Cells(lig, 14).Resize(1, 3).Value = Date
Cells(sel.Row, 1).EntireRow.Delete
End With
End If
End Sub
j'ai copié ca et l'execution s'arrete sur la 2ème ligne "erreur d'execution 424":objet requis
ca fait deux heure que je cherche l'erreur pas trouvé si tu pouvais me mettre sur la voie ce serait sympas merci beaucoup
- 1
- 2
Suivant