Question avec la fonction SI

Résolu/Fermé
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018 - 5 avril 2016 à 21:30
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 6 avril 2016 à 20:25
Bonjour,

Il y a quelque chose dont j'aimerais savoir si c'est faisable. Si oui, comment.

Voici le topo: j'exporte un relevé bancaire d'une certaine institution bancaire qui n'offrent pas la possibilité d'exporter dans Excel. Le fichier peut juste est en format txt. J'ouvre avec un bloc note, puis je copie le tout dans excel puis je convertie. Le hic, c'est que tous les dépôts et tous les retraits se retrouvent dans la même colonne, sans distinction. Par contre, j'ai remarqué qu'il y avait une colonne avec des codes. 1 = dépôt et 0 = retrait. Il reste juste à travailler des formules avec ça.
Dans le fichier joint, le premier bloc, c'est un exemple de ce qui reste après avoir travaillé le fichier un peu. Mais je vous ai juste mis un peu de données. En principe, il devrait y avoir au moins 300 lignes.
Dans le 2e bloc, j'ai mis une fonction dans la colonne E pour copier le montant dans D1 et le mettre le dans E1. Y a-t-il moyen de dire à la place: faire un couper/coller ?
Le 3e bloc est le résultat que je veux avoir. Ou avez-vous d'autres suggestions ?
Merci.

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


15 réponses

MrYAU31 Messages postés 3808 Date d'inscription samedi 23 février 2013 Statut Membre Dernière intervention 8 juillet 2017 1 611
5 avril 2016 à 21:38
Bonjour,
Ton export ne serait un fichier txt avec des séparateurs genre ; ou tabulation ?
Si oui, il te faut importer le fichier sous Excel pour retrouver tes colonnes.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
5 avril 2016 à 21:53
Bonjour

Une solution avec macro (dans Feuil2)
A y être on pourrait automatiser la démarche depuis le fichier initial (texte ou excel)
http://www.cjoint.com/c/FDftZgEFnfq

Cdlmnt
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 13:42
bonjour,

il y a effectivement des séparateurs avec des virgules. et j'ai aussi importé dans Excel, que j'ai converti et récupéré les colonnes. Mais comme je le disais, les dépôts et les retraits se retrouvent toutes dans la même colonne.

ccm81, ta macro est parfaite. C'est exactement ce dont j'avais besoin.
Mais comme je voulais justement faire une macro pour trier le tout, est-ce facile d'insérer ta macro dans la mienne ? à partir d'où dois-je copier le texte du VBA ? est-ce à partir de Option Explicit ou Public sub ?

merci
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 14:14
j'ai un bug. J'ai donc pas dû copier comme il faut ta macro dans la mienne. Je te joins le vrai fichier. J'ai dû modifier un peu car il y avait des info confidentielles dedans (numéro de compte, des noms, etc..)
Ma macro fait un premier tri de colonnes inutiles et la 2e étape est justement d'utiliser ta macro. Mais je n'ai pas terminé après car j'ai plein de triage à faire. Mais si tu exécutes ma macro, tu verras où est le bug.

merci
https://www.cjoint.com/c/FDgmoaViLLV
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
6 avril 2016 à 16:32
Difficile de voir où sont les colonnes à prendre en compte
1. Tu mets ceci dans Module 1
2. Tu modifies les valeurs des constantes Const lideb ...) avec tes n° de colonnes
3. Tu complètes ta macro Tri
4. Avant End Sub (de ta macro tri), tu fais un applel à la procédure OK

Const lideb = 1     ' premiere ligne à traite
Const cocode = 2 ' colonne code 1 (depot) ou 0 (retrait)
Const codepot = 5 ' colonne retrait où tous les montants sont au départ
Const coretrait = 4 ' colonne retrait

Public Sub OK()
Dim li As Long, co As Long, lifin As Long
With ActiveSheet
lifin = .Cells(Rows.Count, 1).End(xlUp).Row
For li = lideb To lifin
If .Cells(li, cocode).Value = 1 Then
.Cells(li, codepot).Value = .Cells(li, coretrait).Value
.Cells(li, coretrait).Value = ""
End If
Next li
Columns(cocode).Delete
End With
End Sub

Public Sub Tri()
' tu mets ton code
'
' puis tu fais un appel à la procedure OK
Call OK
End Sub

Cdlmnt
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 16:52
ouf ! tu m'as perdu ben vite
mais effectivement, j'aurais dû te mettre en couleur les colonnes qui doivent rester après mon premier tri pour t'aider.
Ce sont les colonnes E-I-L-M-N

Mais ce que tu me demandes de mettre dans mon module 1, c'est quelque chose que je ne connais pas du tout. Pour les codes, au moins j'avais compris le truc des colonnes. Mais l'appel à la procédure, sais pas c'est quoi.
comme le premier triage de colonne est important avant de procéder à ta section de macro, voici ma macro suivi de la tienne. Mais quand je l'exécute, ça s'arrête à ma ligne qui explique : séparer les ....
et ça demande un End Sub. Va voir dans le fichier que j'avais mis dans mon post #4, j'ai mis une macro nommé TRI.

Sub tri()
'
' tri Macro
'

'
Columns("A:D").Select
Range("D1").Activate
Selection.Delete Shift:=xlToLeft
Columns("B:D").Select
Selection.Delete Shift:=xlToLeft
Columns("C:D").Select
Selection.Delete Shift:=xlToLeft
Columns("F:I").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").Select
Selection.Style = "Comma"
Selection.ColumnWidth = 14.44
Range("F1").Select
'séparer les dépôts et les retraits
Public Sub OK()
Dim li As Long, co As Long, lifin As Long
With ActiveSheet
lifin = .Cells(Rows.Count, 1).End(xlUp).Row
For li = lideb To lifin
If .Cells(li, 2).Value = 1 Then
.Cells(li, 6).Value = .Cells(li, 5).Value
.Cells(li, 5).Value = ""
End If
Next li
Columns(2).Delete
End With
Call OK
'fin
End Sub
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
6 avril 2016 à 17:13
J'ai du mal m'expliquer ;-)

L'idée est de séparer les deux procédures (tri et separation Depots.Retraits)pour faciliter la lecture et la maintenance
C'est la dernière procedure (OK) qui se chargera de lancer le tri et la séparation des depots/retraits)
La seule chose que tu as à faire c'est copier tout le code ci-dessous et remplacer les noms des colonnes par ceux de ton fichier (dans les 4 premières lignes ci-dessous)

Const lideb = 1       ' premiere ligne à traiter
Const cocode = "B" ' colonne code 1 (depot) ou 0 (retrait)
Const codepot = "E" ' colonne retraits où tous les montants sont au départ
Const coretrait = "D" ' colonne depots

' cette procedure se chanrge de Séparer les depots et les retrits
Public Sub SepareRetraitsDepots()
Dim li As Long, co As Long, lifin As Long
With ActiveSheet
lifin = .Cells(Rows.Count, 1).End(xlUp).Row
For li = lideb To lifin
If .Cells(li, cocode).Value = 1 Then
.Cells(li, codepot).Value = .Cells(li, coretrait).Value
.Cells(li, coretrait).Value = ""
End If
Next li
Columns(cocode).Delete
End With
End Sub

' cette procedure se charge (en principe) du ménage (je ne vois pas de tri)
Public Sub Tri()
Columns("A:D").Select
Range("D1").Activate
Selection.Delete Shift:=xlToLeft
Columns("B:D").Select
Selection.Delete Shift:=xlToLeft
Columns("C:D").Select
Selection.Delete Shift:=xlToLeft
Columns("F:I").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").Select
Selection.Style = "Comma"
Selection.ColumnWidth = 14.44
Range("F1").Select
End Sub

' cette procedure lance le tri et la séparation des depots/Retraits
Public sub OK()
Call Tri
Call SepareRetraitsDepots
End Sub


Cdlmnt
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 17:23
ah ok. Moi, je voulais que le tout soit dans une seule macro et je trouvais plus facile de lancer ta procédure après avoir épuré les colonnes. Je n'ai pas encore écrit les étapes du triage.
J'exporte à chaque mois plusieurs relevés bancaires de toutes les institutions bancaires. J'ai donc une macro de monté pour chacune. Et celle-ci, c'est une nouvelle. Je débute toujours par l'épuration des colonnes, ensuite, je trie: je mets tous les dépôts en haut et tous les retraits en bas, ensuite je mets en ordre alpha puis par date, et je fais des sous-totaux, je renomme des termes, etc...
je vais essayer de mettre ta procédure en premier. je te reviens.
merci
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 17:50
Je n'y arrive pas. Je ne suis pas très calée dans les macros.
Faut vraiment épurer pour qu'il reste juste 5 colonnes et après, faut transférer les dépôts dans une nouvelle colonne.
Si je fais ton étape en premier, je pense que ça va transférer les dépôts dans une colonne où il y a des info déjà.
je te retourne mon fichier, avec juste ma macro dedans (nommé TRI). Exécute ma macro et vois comment tu peux insérer la prochaine étape dans la macro, soit de transférer les dépôts dans une nouvelle colonne. Et c'est seulement ensuite que je pourrai continuer la macro pour l'étape du triage.
merci pour ton aide.
https://www.cjoint.com/c/FDgpXvheENV
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
6 avril 2016 à 19:06
Si j'ai compris

Etape 1. Ctrl+t pour lancer le "tri"
Etape 2. Ctrl+s pour lancer la séparation Depots.Retraits

http://www.cjoint.com/c/FDgreAl7rIq

Cdlmnt
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 19:16
exactement, mais il faut que ça se fasse dans une seule macro. J'ai attribué des boutons macro dans ma barre d'outil d'accès rapide de mon excel pour chaque institution bancaire. Il me reste celle là à faire. Faut que je puisse importer un relevé bancaire et juste cliquer sur un bouton pour que tout se fasse en une shot.
Alors comment mettre l'étape 1 et 2 bout à bout ?
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 6/04/2016 à 20:09
J'ai dissocié les deux procédures pour que tu puisses tester.
Si tout est OK, comme je te l'ai dit au post #7, la procédure OK lance les deux procédures tri et SepareRetritsDepots
Donc, tu ajoutes les lignes ci dessous et ton bouton lance la procédure OK

' cette procédure lance le tri puis la séparation des Depots/Retraits
Public sub OK()
Call Tri
Call SepareRetraitsDepots
End Sub

RQ. Tu peux aussi, pour éviter de placer un bouton, lancer la procédure OK en lui affectant un raccourci clavier

Cdlmnt
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 20:09
oui ça fonctionne en lançant la procédure OK. Si j'ai bien compris, c'est une macro qui faire exécuter 2 macros ?
Maintenant si je veux poursuivre ma macro TRI, je continue juste avant le END SUB ?
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
6 avril 2016 à 20:16
Pour faire plus joli/efficace, tu crées une nouvelle procedure qui fait le nouveau boulot après l'exécution de tri et Separe
Sub Machin()
...
End Sub
Tu la testes sérieusement.
Quand elle est OK, tu ajoutes l'appel à cette procédure dans la procédure OK
qui deviendra
Public sub OK()
Call Tri
Call SepareRetraitsDepots
Call Machin
End Sub
Et si tu dois en avoir d'autres, tu vois ce qui te reste à faire. C'est le principe de la séparation des tâches (diviser pour régner ....)

Bon courage
0
Ju@nita Messages postés 135 Date d'inscription mardi 11 juin 2013 Statut Membre Dernière intervention 19 mars 2018
6 avril 2016 à 20:19
wow ! je ne connaissais pas ça. J'en prends bonne note et un gros merci.

bonne journée.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
6 avril 2016 à 20:25
De rien

Mais par ici, c'est plutôt bonne soirée ;-)

Cordialement et ..... bon après midi à toi
0