Macro qui décale des cellules en fonction de
Bonjour,
Je dois créer une macro qui effectue un certain nombre de mises en forme (suppr colonnes, appliquer format date, trier de A à Z une colonne et l'étendre à toute la sélection, etc...) et notamment une qui, après tri de la colonne J (qui contient 2 valeurs, C et D), déplacer (couper-coller) les valeurs correspondantes de la colonne K en L si J= "c". SI J= "D", alors les valeurs restent en K
Je m'arrache les cheveux depuis hier sur le code que je pourrais intégrer dans le module qui détaille ma macro....
Et si vous m'aidez pour le code, comment dois-je l'intégrer dans ma macro ?
Voici le fichier (sans macro)
Merci pour votre aide urgente
Bonsoir,
Une première approche.
Peux-tu revoir ton fichier pour les points suivants:
1/ Nommer les champs de colonnes
2/ Mettre en évidence les colonnes à supprimer
Puis expliquer précisement ce que tu souhaites
Cordialement
Bonjour,
Je vais la refaire mais pour répondre à ton message, j'ai bien pensé à mettre des formules mais cela ne fonctionne pas car la colonne doit être supprimée ensuite donc les formules ne sont plus valables.
Donc je recommence :
J'exporte des journaux comptables d'un logiciel A pour les intégrer dans le logiciel B. L'export se fait sous format excel. Le fichier excel doit subir des modifs pour qu'il corresponde à la mise en forme des journaux comptable du logiciel B.
Comme je dois faire ces modif pour 10 sociétés, je voulais par le biais d'une macro personnelle, automatiser ces manip qui sont une perte de temps :
En pièce jointe, voici à quoi le premier fichier excel que j'ai posté doit ressembler au final. Pour arriver à cela, j'ai :
- supprimé la ligne 1 ;
- supprimé la colonne A ;
- changé le format de la colonne B ;
- supprimé les données des colonnes C et L ;
- supprimé les colonnes E, F, H et I
- trié la colonne J pour regrouper les valeurs C en premier et D après ;
- déplacé les données situées dans la colonne K correspondant à la valeur C de la colonne J dans la colonne L (les autres sont restées à leur place)
- supprimé la colonne J
Ce fichier final peut être exporté dans le logiciel B car il correspond exactement au format des journaux comptables.
Pour ce faire, j'ai enregistré ma macro personnelle normalement et j'y ai affecté un raccourci clavier.
A la première exécution de ma macro, je me suis heurtée à deux choses :
- la colonne de la date ne se mettait pas automatiquement au format xx/xx/2012 ;
- le décalage des cellules en fonction d'autres cellules. J'ai réussi à trouvé quelques codes qui s'en approchaient mais ils ne fonctionnaient pas.
De plus, je ne sais pas quand intégrer le code car il faut que cela fasse partie d'une seule et même macro exécutable via un contrôle clavier.
Est-ce plus clair ?
Bonjour et merci pour le travail abattu.
Je suis en train de décortiquer le code.
Il y a eu un bug au moment de l'exécution car il y avant un "end sub" de trop que j'ai supprimé.
Par contre au niveau de
'Mise en forme des montants suivant critères C & D
Range("F1").Select
ActiveCell.FormulaR1C1 = "=IF(RC4=""C"",0,RC5)"
Range("G1").Select
ActiveCell.FormulaR1C1 = "=IF(RC4=""C"",RC5,0)"
Range(Cells(1, 6), Cells(DerLigne, 7)).Select
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Columns("E:G").Select
Selection.NumberFormat = "#,##0.00;;;"Je vois "range(cells(1,6)" par exemple, mais comme je l'ai dit, il y a aura 10 fichiers excel à traiter par mois, et le nombre de ligne sera différent le nombre de ligne ayant la valeur C ou D sera différent à chaque fois.. Cette partie de code est-elle toujours valable pour les autres fichiers ?
Par ailleurs, il va falloir que je mette cela en place sur un PC au boulot lundi mais cela doit faire l'objet d'une .XLSB que je vais lancer avec un raccourci clavier.
Que dois-je faire ? J'ouvrirai un fichier excel à traiter, je ferai enregistrer une macro dans classeur de macro perso (en choisissant mon raccourci clavier bien sûr) puis j'irai directement coller ton code dans l'éditeur VBA mais dans quoi ? Dans un nouveau module ou pas ?
Par ailleurs, quelle serait le code de la macro (toujours une macro personnelle et toujours sur raccourci clavier) qui annulerait tout ? En clair, je ferais Ctrl + qqch pour appliquer les modif et ctrl+qqch2 pour revenir à la mise en page initiale du fichier.....
Je viens de coller le code dans un autre classeur d'une autre société, pour tester (pas dans un classeur de macro perso)
J'ai ouvert le classeur, l'éditeur VBA, collé le code puis j'ai exécuté la macro.
J'ai eu un message d'erreur puis après avoir cliqué OK sur ce message, cela a fait les modifs mais par le décalage des cellules et ça m'a supprimé (je ne sais pas pourquoi) une colonne de trop (en l'occurence celle vide située entre la colonne A et la C....
Bonsoir,
Tu peux me l'envoyer brute de fonderie?
Cdlt.
Jean-Eric a écrit :Bonsoir,
Tu peux me l'envoyer brute de fonderie?
Cdlt.
Voici l'autre fichier brut.
C'est toujours le même type de fichier mais pas le même nombre de lignes (car une société peut avoir plus de lignes d'écritures qu'une autre).
Par ailleurs, est-ce que j'ai été claire dans ma question ? A savoir comment faire pour intégrer tout ton code dans une macro perso ? A chaque fois que j'essaie cela ne marche pas ?
Je pars au boulot et j'ai assuré que je reviendrais avec la macro qui tue !
Je te remercie vraiment pour ton aide.
Bonjour,
Ci-joint fichier avec correction code
* Le modules est nommé "Mise_en_Forme". Exportes le dans un dossier.
Pour chaque nouveau fichier client xlsx (pourquoi pas xlsm directement). ALT + F11 et importer "Mise_en_Forme".
Lancer la macro et enregistrer sous xlsm.
Nous verrons comment faire,après comment faire pour automatiser le tout.
Cdlt.
Re,
Idem précédent avec ajout raccourci clavier "CTRL + a" pour lancer le traitement.
Cdlt.
Bonjour,
Je ne suis pas sûre d'avoir compris ce que tu me demandes.
Il n'y a qu'un PC au boulot qui fait la manip donc c'est sur ce PC que je vais travailler et mettre le code.
Pourquoi je choisis macro perso ? Parce que chaque mois la personne chargée de ça extraira un à un du logiciel, pour chacune des sociétés, les journaux de paie qu'elle doit remettre en forme et réintégrer dans le logiciel B. Les fichiers extraits possèdent l'extension .CSV. J'ai du les convertir en xls pour pouvoir te les transmettre sinon ce format n'est pas pris en charge.
Ainsi, la personne n'aura plus qu'à extraire, ouvrir, faire un petit ctrl + qqch (je verrai plus tard pour la lettre choisie) et hop, le fichier est prêt à être intégré dans le logiciel B ! Est-ce que cela répond à ta question ?
Je ne comprends pas la différence entre coller un code sur un module et sur une feuil mais peu importe, je verrai ça plus tard.
J'ai pris l'initiative de coller le code dans Module de personal.xlsb. C'est cool, ça fonctionne !!!
Mais, j'ai remarqué à l'instant que quand je fais ctrl+a, cela ne supprime que la première ligne et ne fait pas le décalage mais si je fais "exécuter une macro" ça marche
J'ai modifié le raccourci et ai affecté un ctrl autre et........désolée.....mais tu ne devineras jamais :
dans le 2ème fichier (FEUIL CBA), le tri ne fonctionne pas correctement ! ce qui fait que je n'ai pas la colonne donc les cellules décalées correspondantes les opérations en crédit (cellules plus à droite) et celles en débit (celles ne devant pas être décalées) ne sont pas regroupées. Le tri s'arrête à la ligne 27 !
Comment faire pour que le code corresponde à tous les fichiers et pas seulement à ceux que je t'ai transférés (quelle est la syntaxe pour que je le fasse ?)
Au secours !!!!!!!
Re,
On reprend calmement :
1/ Le code fonctionne parfaitement. J'ai testé sur le fichier initial.
2/ J'ai crée mon classeur de macros personnelles (personal.xlsb) avec le lien ci-dessous :
3/ Enregistrer "personal.xlsb"
4/ Quitter Excel
Ensuite,
1/ J'ai ouvert le fichier "CBA082012", ALT + F11
1/ J'ai copié le code "Mise_en_forme" du classeur "CBA082012" dans "personal.xlsb"
4/ Enregistrer "personal.xlsb"
5/ Quitter Excel
La macro "Mise_en_forme" est désormais accessible à l'ouverture d'Excel.
Tu ouvres à nouveau CB082012 et effectues CTRL+a et la mise en forme de ton document s'effectue.
Ce qui reste à faire pour automatiser le tout, c'est d'intégrer la conversion csv-xlsx.
C''est à dire ouvrir le csv , effectuer la conversion, faire la mise en forme et enregistrer sous..
Peux-tu m'envoyer un fichier csv?
Re,
J'ai modifié mon post entre temps car je pense avoir réglé mes souci de collage de code. Comme je l'ai dit, j'ai modifié le raccourci clavier mais peu importe. A quel niveau dois-je modifier ton code car je ne vois l'écriture qui traite du raccourci clavier (mis à part le commentaire) si tant est que le raccourci ait un code...
Je ne fais pas exactement ça pour enregistrer ma macro perso mais cela revient au même. Elle est disponible à l'ouverture d'excel et s'applique sur le .csv.
Par contre ton code ne fonctionne pas correctement sur le fichier CBA. Va jusqu'en bas et regarde, le tri n'est pas correctement effectué. Je pense que cela vient du fait que les lignes soient délimitées dans le code. SUr le fichier RAC ça marche.
Par ailleurs, pourquoi convertir le fichier .csv ?
En pièce jointe, un .csv
Quelle serait la macro qui m'effacerait toutes les mises en forme et me remettrait la mise en forme initiale ?
alors ? as-tu vu de quoi je parle ? Le tri ne s'effectue pas correctement : tri de C à DJean-Eric a écrit :Re,
On reprend calmement :
1/ Le code fonctionne parfaitement. J'ai testé sur le fichier initial.
Dis-moi, dans cette étape, tu as créé ta macro mais avec quoi vu que tu as collé le code plus tard ? Tu as ouvert un classeur vide excel, fais la procédure d'enregistrement normale sans effectuer de modif à enregistrer ?Jean-Eric a écrit :2/ J'ai crée mon classeur de macros personnelles (personal.xlsb) avec le lien ci-dessous :
3/ Enregistrer "personal.xlsb"
4/ Quitter Excel
cette procédure est ok normalement pour moi.Jean-Eric a écrit :Ensuite,
1/ J'ai ouvert le fichier "CBA082012", ALT + F11
1/ J'ai copié le code "Mise_en_forme" du classeur "CBA082012" dans "personal.xlsb"
4/ Enregistrer "personal.xlsb"
5/ Quitter Excel
La macro "Mise_en_forme" est désormais accessible à l'ouverture d'Excel.
Tu ouvres à nouveau CB082012 et effectues CTRL+a et la mise en forme de ton document s'effectue.
Pas besoin, aucun intérêt. Je te remercie.Jean-Eric a écrit :Ce qui reste à faire pour automatiser le tout, c'est d'intégrer la conversion csv-xlsx.
C''est à dire ouvrir le csv , effectuer la conversion
Re,
Révision fichier xlsb.
Pour la création du classeur macros, j'ai fait comme tu l'écris... (ouvrir, enregistrer sous personal.xlsb dand le dossier spéficié dans le lien)
Pour le raccourci macro.
Menu développeur, Macros, exécuter, choisir sa macro et
Executer macro, option et créer raccourci clavier
Cdlt
Re,
J'ai honte mais je ne suis pas encore à l'aise avec la manip des xlsb
Je ne sais pas quoi faire de ton fichier... Je ne comprends pas. je ne sais pas dans quel ordre prendre le truc.
Quand je fais ctrl+a, il ne se passe rien. Je me dis que j'utilise mal le xlsb. Je n'ai donc pas pu voir la révision du fichier
Au fait, Je souhaiterais que le contrôle soit ctrl + k (ne me demande pas pourquoi, ce n'est pas pour moi, c'est la préférence à la personne qui va traiter ça).
Puis-je simplement avoir le code (et pas le fichier xlsb, sauf si tu me dis comment m'en servir ! lol !) ?
Et puis-je savoir comment faire la macro qui va effacer toutes les modifs et revenir au fichier initial ?
Merkiiiiiiii
Bon,
Tu as un fichier macros personnelles oui ou non?
un ou plusieurs fichiers .xlsb " dans le dossier !
C:\Users\<nom_de_l’utilisateur>\AppData\Roaming\Microsoft\Excel\XLSTART
Si oui,
Tu ouvres mon fichier personal.xlsb
ALT = F11
Tu sélectionnes le module "Mise_en_Forme"
Tu le déplaces dans ton classeur de macros personnelles (comme expliqué précédemment : sélection, glisser et déplacer)
Tu enregistres et tu quittes
Tu ouvres normalement un classeur et la macro est disponible
Si non,
Il faut en créer un, comme expliquer précédemment:
Quant à inverser la macro, pour revenir à l'initial ce n'est pas la peine car tu as conservé les originaux des csv.
Cdlt
Jean-Eric a écrit :Bon,
Tu as un fichier macros personnelles oui ou non?
un ou plusieurs fichiers .xlsb " dans le dossier !
C:\Users\<nom_de_l’utilisateur>\AppData\Roaming\Microsoft\Excel\XLSTART
Si oui,
Tu ouvres mon fichier personal.xlsb
ALT = F11
Tu sélectionnes le module "Mise_en_Forme"
Tu le déplaces dans ton classeur de macros personnelles (comme expliqué précédemment : sélection, glisser et déplacer)
Tu enregistres et tu quittes
Tu ouvres normalement un classeur et la macro est disponible
Si non,
Il faut en créer un, comme expliquer précédemment:
Oui, je connais le chemin d'accès. J'en ai eu marre et j'ai donc tout effacé.
J'ai recommencé la manip : J'ai créé une macro1 à vide. J'ai ouvert ensuite ton xlsb puis alt +F11. Le module que tu veux que je déplace est déjà dans classeur perso. !!! Je suis lourde je sais, moi-même j'ai du mal à me supporter
Je souhaitais avoir une macro pour que la personne puisse, en cas de doute, revenir en arrière pour vérifier les débits et crédits (D et C)Jean-Eric a écrit :Quant à inverser la macro, pour revenir à l'initial ce n'est pas la peine car tu as conservé les originaux des csv.
Cdlt
Et j'ai beau faire ctrl+a, ça ne marche pas !! ça ne supprime que la ligne 1 !!
J'efface tout à nouveau ! Je vire dans roaming le xlstart.
Quand je repars à zéro, je me trouve face à un message d'erreur qui ne veut pas ouvrir ton personal.xlsb car déjà ouvert par ailleurs.
Je suis désolée mais j'ai vraiment besoin d'aide
Autre petite question, dans le code de ton fichier personal, cette partie
'--------------------------------------------------------------------------------------
'Tri de la plage en fonction de des critères C & D
Range("A1").CurrentRegion.Select
ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add Key:=Range(Cells(1, 4), Cells(DerLigne, 4)) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.ActiveSheet.Sort
.SetRange Range("A1:E27")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End WithSerait-ce elle qui désigne le tri de la plage A1 à E27 ? SI oui, comme je l'ai expliqué, ce ne sera pas toujours A1 à E27 (ça pourrait être plus ou moins de lignes). Le code ne peut pas simplement être plus général (Je ne sais pas si je me fais comprendre).
Re,
Dans le dernier personal.xlsv envoyé,
.SetRange Range("A1:E27")
est remplacé par :
[quote].SetRange Range("A1).CurrentRegion:/quote]
Cdlt.
Jean-Eric a écrit :Re,
Dans le dernier personal.xlsv envoyé,
.SetRange Range("A1:E27")
est remplacé par :
.SetRange Range("A1).CurrentRegion:/quote]
Cdlt.
Ok merci.
Pas vu. De toute façon, je ne peux pas l'ouvrir car il me dit qu'il y a autre classeur déjà ouvert.
J'ai vraiment besoin que tu me guides car je dois mettre ma macro sur le pC de la boss, elle m'attend.
Son PC ne contiendra aucune macro perso.
Par quoi dois-je commencer ? J'ouvre un classeur xls vierge et j'enregistre une macro1 dans classeur de macro perso puis OK et j'arrête l'enregsitrement vu que je n'ai rien à enregistrer en fait ? C'est ça ? Et ensuite ?
J'ai beau retourner le truc dans tous les sens, ya un truc qui m'échappe.. Lorsque je crée une macro neuve depuis un classeur vide, Je ne peux plus ouvrir ton fichier pour accéder à ton module.