Améllioration d'une macro

Je suis trésorier d'une section départementale d'une association d'enfants handicapés et j'essaie d'améliorer l'automatisation de certaines taches qui serviront également à d'autres sections.

Le 31/12 de chaque année, je dois fournir un état de rapprochement pour les chèques émis mais non débités.

Je les retrouve en fin de saisie (feuilet CCP)dans la colonne C servie à blanc, col D servie avec le n° du chèque et dans la colonne H servie avec le montant de la dépense.

La macro "Module1 " que j'ai créée ne me convient pas car le feuillet "CCP" n'a pas toujours le même nbre de lignes et les chèques émis et non débités sont également variables(pas plus de 5 en général). Comment faire un copier-coller des colonnes D et H après avoir créé mon filtre sur la colonne C, en sachant que le résultat n'est pas toujours le même, pour alimenter le feuillet "Etat de rapproch"?

Je vous joins mon fichier, pas de bol il est trop lourd

Merci d'avance

Bonjour et bienvenue sur le forum,

Ce serait + facile de t'aider si tu nous joint un morceau de fichier avec ta macro.

regarde en haut de la page Joindre un fichier

Amicalement

Claude.

édit : si fichier trop lourd ; zip-le ou envoie une copie allégée.

Merci

Ci-joint une partie de mon mon fichier (avec 2 onglets seulement)

https://www.excel-pratique.com/~files/doc/Tresorerie35b_2008essai.zip

Bonne soirée

re,

Tes macros sont inaccessibles sans mot de passe !

comment veux-tu qu'on les corrige ?

tu peux envoyer le module1 en question sur un autre fichier non protégé.

à te relire

amicalement

Claude

Je suis vraiment désolé.

Le mot de passe pour les macros est tout simplement "afeh", Je n'ai rien à cacher.

Comme je débute sur votre forum, je panique un peu.

Bonne nuit

Henri

Bonjour AFEH et à tous,

Comment détecter les chèques non débités ?

j'ai supposé que c'était ceux qui n'ont pas de N° CCP !

essaye ce code dans un nouveau module et dis-moi.

Sub essai()
    Sheets("CCP").Activate
    ActiveSheet.Unprotect
    If [b159].End(xlUp).Offset(0, 1) <> "" Then Exit Sub 'contrôle si N°CCP existant

            [c159].End(xlUp).Offset(1, 1).Name = "top"
            [d159].End(xlUp).Name = "top2"
        With [Top].Offset(0, -1)
            .Select
            .Value = ActiveCell.Offset(-1, 0) + 1 'incrémente N°CCP
            .AutoFill Destination:=Range(ActiveCell, [top2].Offset(0, -1))
        End With

        [top:top2].Copy Destination:=Range("Etat_Rappr!e10")
        Range([Top].Offset(0, 4), [top2].Offset(0, 4)).Copy Destination:=Range("Etat_Rappr!g10")
End Sub

Le N° CCP est incrémenté.

à voir si çà te vas

amicalement

Claude.

Merci, ça marche. L'état de rapprochement est bien alimenté avec les valeurs convenues.

Seulement, comme c'est une opération de fin d'année, l'extrait CCP supportant ces opérations et d'autres sera pour l'année+1, donc il ne faut pas incréménter le N° de CCP.

Merci Claude pour tes compétences

A Bientôt

Henri

re,

Bon, alors comment on fait ?

quels critères a t-on pour savoir quelles sont les valeurs à alimenter ?

- explique comment tu procède habituellement.

j'ai pas bien compris.

à quoi te sert le filtre pour le transfert ?

Claude.

Notre association (gérée par le siège national) a une comptabilté particulière.

Notre trésorerie de section se fait au fur et à mesure que nous recevons nos extraits CCP jusqu'au dernier qui est daté du 31/12 . Seulement, en fin d'année nos opérations de débit qui ne paraissent pas sur ce dernier extrait doivent quand même être saisi dans notre compta(feuillet CCP) sans N° extrait de compte. C'est pour cela que l'on doit créer un état de rapprochement (car l'avoir de notre dernier extrait CCP ne correspond pas à l'avoir réel).

A défaut, la macro que tu m'as adressée pourrait initialiser ces opérations avec un N° extrait de compte= 1/09 (1= 1er extrait de l'année suivante; 09= année en cours+1)

Dès réception des extraits CCP concernant ces opérations, la section ne devra pas, bien entendu, les ressaisir dans la compta de l'année suivante.

Suis-je assez clair?

Amicalment

Henri

Bojour Henri et à tous,

Je voulais savoir si la macro doit copier dans la 2ème feuille, les lignes qui n'ont pas de

N° CCP (cellules vides) , c'est çà ??

Après, on peut remplir la colonne N°CCP avec n'importe quoi, (pourvu que les cellules ne

soit plus vides)

Si c'est une info provisoire, on pourrait mettre simplement "vu"

Dans le fichier que tu m'a envoyé, il y a 2 lignes à traiter, mais çà aurait pu être 3 ou 5, non ?

Précise-moi, car la compta et moi, çà fait deux !

à te lire

Claude.

Bien entendu, on peut envisager de faire un marquage "Vu" où comme je le précisais dans mon ancien message "1/09"(1er extait de l'année N+1).

Effectivement, les opérations de fin d'année de cet ordre peuvent être uniques ou multiples( en général pas + de 5).

Bonne nuit

Henri

Bonjour à tous,

J'ai sans doute mal poser ma question, je vais là formuler autrement :

- Si par exemple la cellule C20 est vide, faut-il la prendre en compte ?

(ce qui expliquerait le filtrage)

- la macro que je t'ai envoyer ne fait pas çà ! , c'est en relisant ton module1 qui filtre la

colonne C, que je me pose la question.

-Si il faut tenir compte du filtrage, c'est pas du tout la même macro !

Confirme

Claude.

re,

en attendant ta réponse, voici le code qui utilise le filtre :

Sub essai2()

nbB = Application.WorksheetFunction.CountA(Range("b9:b158"))
nbc = Application.WorksheetFunction.CountA(Range("c9:c158"))
If nbB = nbc Then Exit Sub 'teste si cellules vides colonne "C"

    Selection.AutoFilter Field:=3, Criteria1:="" 'filtre les cellules vides colonne "C"
    Range("d65000").End(xlUp).Select
    Range("d9", Range("d65000").End(xlUp)).Copy Destination:=Range("Etat_Rappr!e10")
    Range("h9", Range("h65000").End(xlUp)).Copy Destination:=Range("Etat_Rappr!g10")

    Range("d9", Range("d65000").End(xlUp)).Offset(0, -1) = "voir " & [j3] + 1 'écrit col C
              Application.CutCopyMode = False

      rep = MsgBox("Voulez-vous imprimer l'Etat de Rapprochement,", 4)
        If rep = 6 Then
            With Sheets("Etat_Rappr")
                .Activate
                .PageSetup.PrintArea = "$A$1:$G$19"
                .PageSetup.PrintArea = "$A$1:$G$19"
                 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
            End With
        End If
    Sheets("CCP").Select
       ActiveSheet.ShowAllData 'filtrage (affiche tout)
    [a1].Select
End Sub

à tester

Claude.

Bonsoir,

Je viens de tester la 2ème macro mais il y a un problème dans le feuillet "Etat_Rappr".

En effet la colone G est remplie de G10 à G133 et ma cellule G18(contenant une formule) est repoussé en G134.

Sinon c'est OK.

Concernant ta question : la colonne C est toujours remplie, sauf pour les dernières inscriptions qui obligent à créer cet état de rapprochement. Désolé de t'ennuyer encore.

La 1ère macro est convenable aussi, mais le n° de CCP ne doit pas être incrémenté.

Amicalement

Par curiosité : une petite visite de site national:http://www.afeh.net

Henri (section AFEH du Morbihan)

re,

Vu ta réponse, on laisse tomber essai2 (filtrage)

cette nouvelle devrait aller !

Sub essai3()
    Sheets("CCP").Activate
    'ActiveSheet.Unprotect
    If [b159].End(xlUp).Offset(0, 1) <> "" Then Exit Sub 'contrôle si N°CCP existant
    [Etat_Rappr!e10:g15].ClearContents 'efface l'etat précédent

        [c159].End(xlUp).Offset(1, 0).Name = "top"
        [d159].End(xlUp).Name = "top2"

    Range([Top], [top2].Offset(0, -1)) = "voir " & [j3] + 1  'écrit col C
    Range([Top].Offset(0, 1), [top2]).Copy Destination:=Range("Etat_Rappr!e10")
    Range([Top].Offset(0, 5), [top2].Offset(0, 4)).Copy Destination:=Range("Etat_Rappr!g10")
     Application.CutCopyMode = False

    rep = MsgBox("Voulez-vous imprimer l'Etat de Rapprochement,", 4)
        If rep = 6 Then
            With Sheets("Etat_Rappr")
                .Activate
                .PageSetup.PrintArea = "$A$1:$G$19"
                .PageSetup.PrintArea = "$A$1:$G$19"
                 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
            End With
        End If

    Sheets("CCP").Select
        'ActiveSheet.Protect 'si besoin protection
End Sub

n'oublie pas de supprimer les codes précédents

Je n'ai jamais protéger mes codes, comment fait-on ? çà m'intéresse.

J'irai voir ton site

Claude.

OUF!

Voilà la bonne solution.

Je te remercie et te tiens au courant sur la façon de protéger les codes. En fait, moi j'ai fait le gros du travail et d'autres macros ont été reéalisées par des personnes que je connais pas. C'est pourquoi j'ai fait appel au forum.

Maintenant, sans vouloir profiiter de toi, est-il possible de créer une grille de saisie dans le feuillet CCP pour faciliter la prise en compte des opérations d'une manière plus conviviale?

Mais peut-être faut-il clore cette question avant d'entamer une autre?

Sache que la validation de ta macro va être diffusée au plan national et transmise aux différentes sections départementales, (environ 83).

De la part de tous, Merci

Henri

re,

Non, reste sur ce fil, je regarde et te fait une proposition de saisie simplifiée,

par exemple :

  • la date pourrait s'inscrire automatiquement (date du jour saisie)
  • le code de compte (pas facile à mémoriser) >>> liste déroulante en clair qui entre le code.
Je vois çà sur une feuille à part.

à demain

Claude.

Bon OK, on continue .

Pour la date ce n'est pas possible de l'automatiser car c'est obligatoirement celle qui figure sur l'extait CCP reçu de la Banque Postale.

Le compte affecté est déjà automatisé avec la fonction Si et Decaler.

Je te joins un nouveau fichier avec tous les feuillets, mais j'ai supprimé toutes les macros pour que puisse t'adresser un fichier zipé de -100Ko

Bon week end

Henri

Bonjour Henri,

Ton lien n'est pas bon !

peux-tu le refaire

Claude.

Rechercher des sujets similaires à "amellioration macro"