Modification Code Dispatching (Code de Job)

an@s

XLDnaute Occasionnel
Bonjour à tous,
premièrement je m'excuse d'avoir crée tant de psoeudo et cela parce que premièrement je suis nul en VBA donc je me connecte rarement sur le site du coup à chaque fois j'ai besoin de quoi que ce soit concernant mon boulot je crée un nouveau pseudo parce que je ne garde pas l'ancien en pensant que ce n'est pas grave tant que ca ne fait mal à personne ( je déclare garderai dorénavant celui ci)

pour mon sujet et comme vous pouvez constater dans le fichier ci-annexé j'ai un code dans la feuille RECAP qui crée deux tableaux qui viennent des feuilles PAIE MENS & PAIE HOR

ce que je souhaite avoir c'est de rajouter sur cette feuille RECAP un autre code permettant de :

  • Pour feuille ODA MENS :
Copier colonne C de RECAP dans colonne H de ODA Mens
Copier colonne A de RECAP dans colonne L si les données de colonne A commencent avec MATX. (avec point)
Copier colonne A de REcap dans colonne J si les donnes de la colonne A commencent avec MATX (sans point)

  • Pour feuille ODA HOR :
Copier colonne I de RECAP dans colonne H de ODA Mens
Copier colonne H de RECAP dans colonne O de ODA Hor
Copier colonne G de RECAP dans colonne L si les données de colonne A commencent avec MATX. (avec point)
Copier colonne G de RECAP dans colonne J si les donnes de la colonne A commencent avec MATX (sans point)

NB: les données de colonne B et G (nature comptable) puis I et P sans oublier la colonne O sont exporté avec ce tableau d'un système et il faut les garder tel qu'ils sont

  • pour la feuille CAP Congés (Mens)
copier les données de la colonne W de la feuille PAIE-MENS-DTE dans la colonne D de la feuille CAP Congés (Mens)
copier les données de la colonne AD de la feuille PAIE-MENS-DTE dans la colonne M de la feuille CAP Congés (Mens) si ca commence avec MATX. (avec Point)
copier les données de la colonne AD de la feuille PAIE-MENS-DTE dans la colonne L de la feuille CAP Congés (Mens) si ca commence avec MATX. (sans Point)
copier les données de la colonne D de la feuille PAIE-MENS-DTE dans la colonne N de la feuille CAP Congés (Mens)

NB: dans PAIE-MES-DTE s'il existe des lignes dont les données de la colonne AD et D sont identiques on les rassemble dans une seule ligne dans CAP Congés (Mens) avec la somme des montant de la colonne W en un seul
  • pour la feuille CAP Congés (Hor)
copier les données de la colonne W de la feuille PAIE-HOR-DTE dans la colonne D de la feuille CAP Congés (Hor)
copier les données de la colonne AD de la feuille PAIE-HOR-DTE dans la colonne M de la feuille CAP Congés (Hor) si ca commence avec MATX. (avec Point)
copier les données de la colonne AD de la feuille PAIE-HOR-DTE dans la colonne L de la feuille CAP Congés (Hor) si ca commence avec MATX. (sans Point)
copier les données de la colonne D de la feuille PAIE-HOR-DTE dans la colonne N de la feuille CAP Congés (Hor)

NB: dans PAIE-HOR-DTE s'il existe des lignes dont les données de la colonne AD et D sont identiques on les rassemble dans une seule ligne dans CAP Congés (Mens) avec la somme des montant de la colonne W en un seul

Cordialement
 

Pièces jointes

  • REFAC.xlsm
    349.6 KB · Affichages: 45

job75

XLDnaute Barbatruc
Bonsoir an@s,

C'est bien de nous présenter vos excuses Sxxxx Mxxxxx, moi je les accepte bien volontiers.

Je note que vous interviendrez maintenant uniquement sous le pseudo an@s.

Pour votre projet je ne traiterai sur ce fil que les feuilles 'ODA MENS' et 'ODA HOR', c'est ce que vous demandiez sur le fil précédent.

Mais il y a un os, ceci ne va pas du tout :
NB: les données de colonne B et G (nature comptable) puis I et P sans oublier la colonne O sont exporté avec ce tableau d'un système et il faut les garder tel qu'ils sont
Il est incohérent de penser que dans les feuilles 'ODA' les données des colonnes B G I P peuvent être conservées telles quelles : le tableau doit être complètement effacé au départ puisqu'à la limite la feuille source 'RECAP' peut être vide !

Il faut donc connaître les valeurs à insérer sur chaque ligne, à défaut je ne m'occupe pas de ces colonnes.

La macro (paramétrée) dans Module3 :
Code:
Sub ODA(deb As Range, choix As Byte)
Dim r As Range, nlig&, n&
Application.ScreenUpdating = False
Rows("7:" & Rows.Count).Delete 'RAZ
RECAP IIf(choix = 1, "PAIE-MENS", "PAIE-HOR"), deb 'MAJ de RECAP
Set r = deb.EntireColumn.Find("TOTAl", , xlValues)
If r Is Nothing Then Exit Sub
'---copie des colonnes de RECAP---
nlig = r.Row - deb.Row - 1
deb(2, 3).Resize(nlig).Copy [H7]
deb(2).Resize(nlig).Copy [J7]
If choix = 2 Then deb(2, 2).Resize(nlig).Copy [O7]
'---traitement des colonnes J et L---
n = Application.CountIf([J:J], "MATX.*")
If n Then
  Set r = [J:J].Find("MATX.*", , , xlWhole).Resize(n)
  r.Copy r(1, 3): r = ""
End If
'---colonne A---
[A7].Resize(nlig) = "=10*(ROW()-7)"
[A7].Resize(nlig) = [A7].Resize(nlig).Value
'---bordures---
[B7].Resize(nlig, 17).Borders.Weight = xlThin
[B7].Resize(nlig, 17).Borders(xlInsideHorizontal).LineStyle = xlDot
'[B7].Resize(nlig, 17).Borders(xlInsideHorizontal).Weight = xlHairline 'si l'on préfère
With ActiveSheet.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Fichier joint.

A+
 

Pièces jointes

  • REFAC ODA(1).xlsm
    80.7 KB · Affichages: 36

ChTi160

XLDnaute Barbatruc
Bonsoir an@s
Bonsoir le Fil ,Le Forum
Bon je ne comprends pas tout lol
n'y a t'il pas une erreur quand tu dis :
"Copier colonne I de RECAP dans colonne H de ODA Mens "
Pour feuille ODA HOR :
Copier colonne I de RECAP dans colonne H de ODA Mens
Copier colonne H de RECAP dans colonne O de ODA Hor
puis :
"NB: les données de colonne B et G (nature comptable) puis I et P sans oublier la colonne O sont exporté avec ce tableau d'un système et il faut les garder tel qu'ils sont"
pour
pour la feuille CAP Congés (Mens)
tu dis :
NB: dans PAIE-MES-DTE s'il existe des lignes dont les données de la colonne AD et D sont identiques on les rassemble dans une seule ligne dans CAP Congés (Mens) avec la somme des montant de la colonne W en un seul;
voir texte en gras !
peux tu expliquer ?
Bonne fin de Soirée
Amicalement
jean marie
PS Bonsoir Job75[/Quote]
 
Dernière édition:

an@s

XLDnaute Occasionnel
Bonsoir Job, le forum

je ne savais pas que le tableau doit être complètement effacé:
mais vous expliquer mieux ce tableau est pour la refacturation d'un centre de cout qui est le siège social vers différents entreprises et les données de ces colonnes sont fixes et sont obligatoires pour copier et coller ce tableau dans le système afin de passer la refacturation :
Centre de cout d'origine : FATOL0012067 c'est l'identifiant du siège
NC: 920147 c'est la nature comptable
Devise : MAD
Quantité totale: 1 (c'estt à dire un seul Mois)
Unité: Mos (c'est à dire Mois)

donc on doit garder ces informations sur toutes les lignes du tableau y compris la mise en forme : les couleurs...
 

job75

XLDnaute Barbatruc
Re, salut ChTi160,

Curieux quand même que ce soient les mêmes valeurs pour toutes les lignes.

C'est alors bien simple :
Code:
Sub ODA(deb As Range, choix As Byte)
Dim r As Range, nlig&, n&
Application.ScreenUpdating = False
Rows("7:" & Rows.Count).Delete 'RAZ
RECAP IIf(choix = 1, "PAIE-MENS", "PAIE-HOR"), deb 'MAJ de RECAP
Set r = deb.EntireColumn.Find("TOTAl", , xlValues)
If r Is Nothing Then Exit Sub
'---copie des colonnes de RECAP---
nlig = r.Row - deb.Row - 1
deb(2, 3).Resize(nlig).Copy [H7]
deb(2).Resize(nlig).Copy [J7]
If choix = 2 Then deb(2, 2).Resize(nlig).Copy [O7]
'---traitement des colonnes J et L---
n = Application.CountIf([J:J], "MATX.*")
If n Then
  Set r = [J:J].Find("MATX.*", , , xlWhole).Resize(n)
  r.Copy r(1, 3): r = ""
End If
'---colonnes A B G I P et O---
[A7].Resize(nlig) = "=10*(ROW()-7)"
[A7].Resize(nlig) = [A7].Resize(nlig).Value
[B7].Resize(nlig) = IIf(choix = 1, "FATOL0012067", "BATO001675")
[G7].Resize(nlig) = IIf(choix = 1, 920147, 920142)
[I7].Resize(nlig) = "MAD"
[P7].Resize(nlig) = IIf(choix = 1, "MOS", "H")
If choix = 1 Then [O7].Resize(nlig) = 1
'---couleurs---
[A7].Resize(nlig).Interior.ColorIndex = 24 'bleu-gris
[H7].Resize(nlig).Interior.ColorIndex = 6  'jaune
[J7].Resize(nlig).Interior.ColorIndex = 6  'jaune
[L7].Resize(nlig).Interior.ColorIndex = 6  'jaune
If choix = 2 Then [O7].Resize(nlig).Interior.ColorIndex = 6 'jaune
'---bordures---
[B7].Resize(nlig, 17).Borders.Weight = xlThin
[B7].Resize(nlig, 17).Borders(xlInsideHorizontal).LineStyle = xlDot
'[B7].Resize(nlig, 17).Borders(xlInsideHorizontal).Weight = xlHairline 'si l'on préfère
With ActiveSheet.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Fichier (2).

Bonne fin de soirée.
 

Pièces jointes

  • REFAC ODA(2).xlsm
    83.4 KB · Affichages: 35

an@s

XLDnaute Occasionnel
Re Job, ChTi160, le forum

merci infiniment pour votre réponse c'est exactement ce que je voulais pour cette deuxième partie du projet vous m'avez sauvé la vie, ce que je faisais auparavant en 2 heures dorénavant je le ferai en un seul clic.

il y'a juste un petit truc à rectifier concernant:
les entêtes du tableau (ligne 6) doivent être toujours colorées en blanc et ne doivent pas être colorées en jaune.

est ce que vous pouvez traiter s'il vous plait la 3ème et la dernière partie de ce projet concernant les feuilles CAP Congés (Mens) et CAP Congés (Hor)??
je sais que j'exagère mais en même temps vous êtes le seul qui peut répondre sur ça, vu le résultat obtenu sur pas mal de projet dans les autres forums..
je peux attendre le temps que vous serez disponible pour m'aider sur la dernière partie

EDIT: C'est les mêmes valeurs pour toutes les lignes parce qu'à l'origine c'est juste un seul montant qu'on a dans un post transitoire et qu'on dispatche sur plusieurs postes.

Merci beaucoup encore une autre fois

Amicalement
An@s
 

an@s

XLDnaute Occasionnel
d'accord pour la ligne 6 du tableau,
concernant les deux autres feuilles je n'ai pas de problème d'attendre même un mois ou deux, l'essentiel c'est d'avoir un résultat de votre part et non pas de quelqu'un vu que vous êtes la personne qui a commencé ce projet et deuxièmement parce que vos réponses sont toujours efficaces,

en attendant je vous souhaite une douce nuit

An@s
 

job75

XLDnaute Barbatruc
Bonjour an@s, le forum,

Il ne m'a pas été difficile de construire les macros paramétrées MAJ_DTE et CAP_Conges, il suffisait d'adapter les codes existants :
Code:
Option Compare Text 'la casse est ignorée (sécurité)

Sub CAP_Conges(feuille$)
Dim i&, j&, r As Range, k&, x$, n&
Application.ScreenUpdating = False
Rows("7:" & Rows.Count).Delete 'RAZ
With Sheets(feuille)
  i = .Range("E" & .Rows.Count).End(xlUp).Row + 2
  For i = i To 3 Step -1
    If .Range("E" & i) <> "" Then 'dernière ligne effective
      i = i - 2
      [D7].Resize(i) = .[W3].Resize(i).Value
      [L7].Resize(i) = .[AD3].Resize(i).Value
      [N7].Resize(i) = .[D3].Resize(i).Value
      [A7].Resize(i, 14).Sort [L7], xlAscending, [N7], , xlAscending, Header:=xlNo 'tri 2 colonnes
      '---regroupement des doublons Centre de coût/POINT DE PAIE---
      Set r = [A7]
      For j = 1 To i
        x = r(j, 12) & Chr(1) & r(j, 14)
        For k = j + 1 To i
          If r(k, 12) & Chr(1) & r(k, 14) <> x Then Exit For
          r(j, 4) = r(j, 4) + r(k, 4)
          r(k, 12) = "zzzz" 'repère la cellule doublon Centre de coût
          n = n + 1 'comptage
        Next k
        j = k - 1
      Next j
      r.Resize(i, 14).Sort r(1, 12), Header:=xlNo 'nouveau tri pour regrouper et accélérer la suppression
      '---suppression des cellules Centre de coût repérées---
      If n Then r(1, 12).EntireColumn.Find("zzzz", , xlValues).Resize(n).EntireRow.Delete
      i = i - n
      '---traitement des colonnes L et M---
      n = Application.CountIf([L:L], "MATX.*")
      If n Then
        Set r = [L:L].Find("MATX.*", , , xlWhole).Resize(n)
        r.Copy r(1, 2): r = ""
      End If
      '---colonnes A C F I---
      [A7].Resize(i) = 641910
      [C7].Resize(i) = "Débit"
      [F7].Resize(i) = "D9"
      [I7].Resize(i) = "MATX"
      '---couleurs---
      Union([A7].Resize(i), [C7].Resize(i), [L7].Resize(i)).Interior.ColorIndex = 6 'jaune
      Union([B7].Resize(i), [E7].Resize(i), [G7].Resize(i), [J7].Resize(i)).Interior.Pattern = xlGray50 'motif
      Union([D7].Resize(i), [M7].Resize(i, 2)).Interior.Color = 10092390 'vert
      Union([F7].Resize(i), [I7].Resize(i), [K7].Resize(i)).Interior.ColorIndex = 24 'bleu-gris
      [H7].Resize(i).Interior.ColorIndex = 45 'orange
      '---bordures---
      [A7].Resize(i, 14).Borders.Weight = xlThin
      For j = 7 To 10: [A7].Resize(i, 14).Borders(j).Weight = xlMedium: Next j
      Exit For
    End If
  Next i
End With
With ActiveSheet.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Notez que dans cette macro et dans la macro ODA seules les valeurs des fichiers sources sont copiées.

Cela permet dans les feuilles "ODA" et "CAP Congés" de compléter la mise en forme manuellement et comme on veut (en particulier d'appliquer la police "Book Antiqua").

Nota : attention, il y avait un espace superflu à la fin du nom d'onglet "PAIE-MENS-DTE"...

Fichier final joint.

Bon dimanche.
 

Pièces jointes

  • REFAC final(1).xlsm
    221 KB · Affichages: 46

job75

XLDnaute Barbatruc
Bonjour ChTi160,

Juste 2 remarques sur ton code :

- les hauteurs des tableaux de destination ne s'adaptent pas au nombre de lignes effectivement renseignées, nombre qui peut être nul...

- il n'est pas logique d'utiliser un bouton de la feuille "RECAP" pour remplir les tableaux des 4 dernières feuilles puisque la feuille "RECAP" ne récapitule que les feuilles "PAIE-MENS" et "PAIE-HOR".

A+
 

an@s

XLDnaute Occasionnel
Bonjour Job, ChTi160, le forum
merci beaucoup pour le code c'est exactement ce que je voulais...vous m'avez sauvé...je vous en serai reconnaissant toute ma vie...

dans votre fichier ci-joint j'ai enlevé les codes pour que les tableaux ne se mettent pas à jour afin de vous demander s'il y'a une possibilité de rajouter un moyen de vérification comme j'ai fait en bas des tableaux des 4 dernières feuilles avec la mise mise en forme et toujours la position c'est deux lignes vides après la dernière ligne du tableau

et dans la colonne R de ODA Mens & ODA Hor, et la colonne H de CAP Congés Hor & CAP Congés Mens de garder aussi cette formule après mise à jour

merci beaucoup encore une autre fois...le fichier est complet

Cordialement
An@s
 

Pièces jointes

  • REFAC final(1).xlsm
    194.1 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re,

Pour les vérifications voyez ce fichier (2) et la formule en 'ODA MENS'!J3 :
Code:
=ABS(SOMME(H:H)-SOMME('PAIE-MENS'!Q:Q))<0,000001
Ces vérifications ne sont guère utiles ici, les calculs VBA étant très faiblement entachés d'erreur du fait qu'ils se font avec seulement 15 chiffres significatifs.

A+
 

Pièces jointes

  • REFAC final(2).xlsm
    233 KB · Affichages: 29

an@s

XLDnaute Occasionnel
Re,
la formule elle est bien mais l'emplacement on peut pas l'avoir la ou je l'ai mis dans le dernier fichier si c'est possible c'est à dire en bas du tableau ?

EDIT: si ce n'est pas possible on laisse tomber la vérification, on traite juste le 2ème point concernant les R et H
 
Dernière édition:

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

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