Besoin d'aide pour une macro

Lorwent

XLDnaute Nouveau
Bonjour,

J'ai retravaillé complètement le fichier que je souhaite utiliser pour ma compta personnelle. Pour qu'il soit vraiment pratique a utiliser, j'aurais besoin d'aide pour une macro.

Je suis absolument incapable de réaliser cela moi-même, mais si je trouve quelqu'un qui peut me le faire, je suis prêt à le rémunérer modestement

Ci-joint vous trouverez deux fichiers, mon fichier de base et une copie avec quelques exemple du fonctionnement que je souhaiterais automatiser.

Je souhaite procéder ainsi;

1. Je rentre mes données dans l'onglet "Ecritures" en sélectionnant les comptes qui sont affectés (G & H)
2. Selon le compte qui est sélectionné en "H", je souhaite que les infos entrées en B, D et I soient reportées dans l'onglet qui porte le même nom que le compte sélectionné en "H"
3. Si une compte est sélectionné en "G", je souhaite que les infos entrées en B,D et J soit reportées dans l'onglet qui porte le même nom que le compte sélectionné en "G"
4. Le tout, chaque fois à la ligne

Merci d'avance
 

Pièces jointes

  • Compta 2017_exemple.xlsx
    830.4 KB · Affichages: 31
  • Compta 2017_test.xlsx
    831 KB · Affichages: 17

vgendron

XLDnaute Barbatruc
Hello

avec ce code à mettre dans un module VBA standard
VB:
Sub ventiler()
'ventile les infos de la DERNIERE ligne

LastLine = Range("B" & Rows.Count).End(xlUp).Row
'on récupère les infos à copier
DateEcriture = Range("B" & LastLine)
Désignation = Range("D" & LastLine)
CompteDébité = Range("G" & LastLine)
CompteCrédité = Range("H" & LastLine)

Débit = Range("I" & LastLine)
Crédit = Range("J" & LastLine)

With Sheets(CompteCrédité)
   'on cherche la position de la première ligne  VIDE (après la dernière ligne non vide)
    finfeuille = .Range("A" & .Rows.Count).End(xlUp).Row + 1
  'on écrit les infos
    .Range("A" & finfeuille) = DateEcriture
    .Range("B" & finfeuille) = Désignation
    .Range("D" & finfeuille) = Débit
End With

If CompteDébité <> "" Then
    With Sheets(CompteDébité)
 'on cherche la position de la première ligne  VIDE (après la dernière ligne non vide)
    finfeuille = .Range("A" & .Rows.Count).End(xlUp).Row + 1
'on écrit les infos
    .Range("A" & finfeuille) = DateEcriture
    .Range("B" & finfeuille) = Désignation
    .Range("D" & finfeuille) = Crédit
End With
End If
msgbox "opération terminée"
End Sub
 

Pièces jointes

  • Compta 2017_exemple.xlsm
    843.9 KB · Affichages: 26

Lorwent

XLDnaute Nouveau
Bonsoir,

Merci beaucoup pour votre travail. Je crois avoir été capable de copier ce code à la bonne place et lors de mon premier test, cela à fonctionné.

Par contre lors d'un deuxième essai, Microsoft Visual Basic me dit: "Impossible d'exécuter le code en mode arrêt" Comment ne pas être en mode arrêt ?

De plus je crois avoir remarqué une erreur qui est dû à mon explication; par exemple:

Je rempli une ligne dans l'onglet "Ecritures" (une ligne, = Cellules B/C/D/E/F/G/H/I/J),

Si une valeur est entrée dans la colonne "G", les valeurs présentes dans les colonnes B/D/I sont reporté dans l'onglet portant le même nom que la valeur entrée en "G", à la ligne

Si une valeur est entrée dans la colonne "H", les valeurs présentes dans les colonnes B/D/J sont reporté dans l'onglet portant le même nom que la valeur entrée en "H", à la ligne

Si, sur la même ligne une valeur est entrée dans la colonne "G" et une autre dans la colonne "H", les valeurs présentes dans les colonnes B/D/I sont reporté dans l'onglet portant le même nom que la valeur entrée en "G" et les valeurs présentes dans les colonnes B/D/J sont reporté dans l'onglet portant le même nom que la valeur entrée en "H", à la ligne

Voilà, je ne me rend pas compte du travail nécessaire à cette modification et par avance je vous remercie pour l'aide que vous m'avez apporté.
 

vgendron

XLDnaute Barbatruc
Hello

Par contre lors d'un deuxième essai, Microsoft Visual Basic me dit: "Impossible d'exécuter le code en mode arrêt" Comment ne pas être en mode arrêt ?
avec le fichier que j'ai joint dans ma proposition, je n'ai pas ce message d'erreur: j'ai beau cliquer 2 3 10 fois sur le bouton "Ventiler" la ligne est copiée à chaque fois.. as tu modifié quelque chose?, mis un point d'arret sur la macro??

Si une valeur est entrée dans la colonne "G", les valeurs présentes dans les colonnes B/D/I sont reporté dans l'onglet portant le même nom que la valeur entrée en "G", à la ligne
c'est effectivement ce que fait cette partie du code
VB:
If CompteDébité <> "" Then 'on teste si en G il y a quelque chose
    With Sheets(CompteDébité)
        finfeuille = .Range("A" & .Rows.Count).End(xlUp).Row + 1
        .Range("A" & finfeuille) = DateEcriture 'info B
        .Range("B" & finfeuille) = Désignation 'Info D
        .Range("D" & finfeuille) = Crédit 'Info I
    End With
End If


Si une valeur est entrée dans la colonne "H", les valeurs présentes dans les colonnes B/D/J sont reporté dans l'onglet portant le même nom que la valeur entrée en "H", à la ligne

c'est ce que fait cette partie du code à la nuance près que.. on ne teste pas SI il y a une valeur..
suite à ton premier message, j'ai pensé qu'il y avait forcément quelque chose en H donc, il n'y a pas le test if....
VB:
With Sheets(CompteCrédité)
    finfeuille = .Range("A" & .Rows.Count).End(xlUp).Row + 1
    .Range("A" & finfeuille) = DateEcriture
    .Range("B" & finfeuille) = Désignation
    .Range("D" & finfeuille) = Débit
End With


Si, sur la même ligne une valeur est entrée dans la colonne "G" et une autre dans la colonne "H", les valeurs présentes dans les colonnes B/D/I sont reporté dans l'onglet portant le même nom que la valeur entrée en "G" et les valeurs présentes dans les colonnes B/D/J sont reporté dans l'onglet portant le même nom que la valeur entrée en "H", à la ligne

c'est donc le cumul de ce qui est décrit juste avant

Voilà, je ne me rend pas compte du travail nécessaire à cette modification et par avance je vous remercie pour l'aide que vous m'avez apporté.

bah en fait. ca va dépendre de la modif que tu veux :)
 

Discussions similaires

Réponses
15
Affichages
789
Réponses
20
Affichages
645

Statistiques des forums

Discussions
314 651
Messages
2 111 555
Membres
111 201
dernier inscrit
netcam