[VBA] centralisation de lignes de saisie

faenor86

XLDnaute Nouveau
Bonjour à tous,

J'ai décidé par la force des choses de tâter au VBA et je dois dire que je galère un petit peu pour réaliser une "procédure" qui vous paraitra sûrement simple : une bête succession de copier/coller valeur.

Concrètement comment se présente mon programme :
J'ai un fichier excel dans lequel je réalise des saisies comptables. Un onglet correspond à une grille de saisie structurée de la façon suivante :

CodeJAL Date Compte N°pièce/ref Libellé CodeAnalytique Débit Crédit

J'ai donc un journal de largeur fixe (8 colonnes) mais de hauteurs variables car dépendant du nombre de saisies.
Le nombre de journaux de saisie ne devrait pas excédé une demi douzaine d'onglets.
L'étape où j'ai réellement besoin du VBA est la suivante : une fois les infos saisies dans mes journaux "auxiliaires"
Je souhaiterais les regrouper dans un journal "centralisateur" en automatisant des copier/coller successifs mais avec la contrainte de copier les plages les unes en dessous des autres sans blanc et sans me détruire mon visuel.

Je ne peux pas me servir de l'enregistreur de macro vu que la taille des plages est variable...

Pouvez-vous me donner un premier canevas de code ? Pour l'instant, je n'arrive qu'à faire des copiers/coller de plage simple sur un même onglet et encore, je n'arrive pas à coller uniquement la valeur....

Merci d'avance pour votre aide !
 

Pièces jointes

  • test_compta1.xls
    101 KB · Affichages: 134

Dranreb

XLDnaute Barbatruc
Re : [VBA] centralisation de lignes de saisie

Bonjour.
À mettre dans le module "Feuil7 (Journal centralisateur)":
VB:
Option Explicit
'

Private Sub Worksheet_Activate()
Dim L As Long, F As Worksheet, N As Long, NbL As Long
L = 5
For N = 2 To Me.Index - 1
   Set F = ThisWorkbook.Worksheets(N)
   NbL = F.[M4].Value
   If NbL > 0 Then
      Me.Cells(L, 2).Resize(NbL, 8).Value = F.Cells(8, 2).Resize(NbL, 8).Value
      L = L + NbL
      End If
   Next N
End Sub
Cordialement.
 

faenor86

XLDnaute Nouveau
Re : [VBA] centralisation de lignes de saisie

Bonjour Dranreb,

Merci pour ta méthode qui est diablement efficace !
J'ai juste une erreur d'équilibre dans mon journal centralisateur. En fait, je ne pensais qu'on me présenterait une solution "algorithmique" au problème. Dans le cas contraire, j'aurais pu essayer d'adapter le code fourni mais là je préfère redemander....

En fait, je distingue 2 types de journaux, ceux avec contrepartie en pied de page et ceux avec contrepartie après chaque mouvements. Dans les journaux CCM-CC , CCM-livret et la caisse, il faudrait juste reprendre la ligne 119 de l'onglet pour équilibrer.
J'imagine qu'il faut en théorie un ensemble : select + specialpaste après la boucle....

Merci !
 

Dranreb

XLDnaute Barbatruc
Re : [VBA] centralisation de lignes de saisie

Vous voulez dire que si la feuille contient une ligne dont la colonne F commence par "Mouvement" (c'est la 118 dans "journal caisse") il faudrait la coller à la suite de la liste dans le journal centralisateur ?
 

faenor86

XLDnaute Nouveau
Re : [VBA] centralisation de lignes de saisie

En fait, je pense que le mieux serait d'avoir dans tous les journaux auxiliaires, une case (en adresse "M2" par exemple) qui indiquerait le type de journal.
Si M2 = TR => récupérer la grille ainsi que le pied de page
Sinon récupérer la grille uniquement

merci !
 

Dranreb

XLDnaute Barbatruc
Re : [VBA] centralisation de lignes de saisie

VB:
Private Sub Worksheet_Activate()
Dim L As Long, N As Long, F As Worksheet, NbL As Long
L = 5
For N = 2 To Me.Index - 1
   Set F = ThisWorkbook.Worksheets(N)
   NbL = F.[M4].Value
   If NbL > 0 Then
      Me.Cells(L, 2).Resize(NbL, 8).Value = F.Cells(8, 2).Resize(NbL, 8).Value
      L = L + NbL
      End If
   If F.[M2].Value = "TR" Then
      Me.Cells(L, 2).Resize(1, 8).Value = F.Cells(119, 2).Resize(1, 8).Value
      L = L + 1
      End If
   Next N
Me.Cells(L, 2).Resize(Me.Rows.Count - L, 8).ClearContents
End Sub
Mais attention à la position 119 de la ligne dans toutes les feuilles. On pourrait s'en affranchir en donnant des noms aux plages au niveau des feuilles.
À +
 

Discussions similaires

Réponses
6
Affichages
393

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16