Aide sur fonction tableau
Ce qui serait intéressant c'est un tableau précis des comparaisons que vous voulez effectuer :
Ex : évolution CA par journées par journées ou/et par semaines ou/et par feuille ou/et...
... Nbre de heures supplémentaires ... Heures réalisées
Pour qu'on puisse vous guider cela suppose un calendrier au plus près du vrai. Le synoptique peut importe :
Ce qui est intéressant ce sont les données à traiter et le résultat à obtenir.
Ainsi on pourrait vous montrer la manière de faire: Plutôt que de réinventer la roue...
Je vais essayer de vous faire un calendrier transposé en colonne. ça vous donnera peut-être d'autres idées...
A+
Je souhaiterai que mon tableau de planning s'agrémente automatiquement suivant:
1)_la date de livraison(colonne I du synoptique) - Intervalle "NB DE JOURS POUR LA MISE EN FABRICATION AVANT LA DATE DE LIVRAISON" (cellules B5 et C5 de source/classeur planning) et hors jours fériés et de congés (plage A9 - A45 de source/classeur planning)
2)_La somme des tubes max desdifférentestâches de la journée (C16 ... des mois du classeur planning) ne doit pas excéder l'intervalle "INTERVALLE DE NB DE TUBES PAR JOUR"(cellules B4 et C4 de source/classeur planning)
3)_Si une date est saisie manuellement dans la colonne "DATE DEFINITIVE" et que la colonne "ETAT DE REALISATION DE LA DALLE" n'est pas cochée alors cette date doit prendre le dessus sur la date prévisionnelle qui est renseigné par le classeur synoptique.
sur une même ligne:
1ere cellule "NOM DU CHANTIER
2eme cellule "NOM DU BATIMENT"
3eme cellule "NOM DE L'ETAGE"
4eme cellule "PRIX HT"
5eme cellule "NB TUBES ESTIMES"
8eme cellule "DATE PREVISIONNELLE"
| lundi 3 janvier 2022 | PRIX HT | NB TUBES ESTIMES | NB TUBES REELS | ETAT DE REALISATION DE LA DALLE (X en MAJ) | DATE PREVISIONNELLE | DATE DEFINITIVE | ||
| PALOMA | BAT A | RDC | 1 000.00 € | 100 | 03/01/2022 | |||
YA pouce !
Attend je t'arrête tout de suite : Ton laïus tu peux te le garder, je vais pas acheter un décodeur pour traduire ça en Excel.
Je vais essayer de te servir sur un plateau une macro qui va te sortir sur 9 colonnes et 350 lignes les 25 jours de chaque mois. Après je pense que tu devrais arriver à te débrouiller pour exploiter cela plus facilement (ne serait-ce qu'avec PQ...)
Après ce sera à toi de voir comment tu fais ton tableau comparatif : Pour moi YAPA 16 macros à faire mais 2 ou 3 au maximum pour reporter tes données quotidiennes
D'abord sur 9 colonnes et ensuite sur une seule colonne/jour afin de comparer ce qui est comparable.
In fine Tu devrais avoir un tableau de 400 colonnes (25 jours x 16 mois)
et 97 lignes (Date + 90 cellules + 6 cellules de totaux (les lignes 34, 52.... de tes mensuelles)
Avec ça tu dois pouvoir comparer ce que tu veux avec les moyens que tu veux Formules, VBA, ou PQ c'est comme tu le sens...
Bon pour l'instant tu vois peut-être pas encore ou je vais mais attend un peu... je dois m'absenter pour le moment.
On verras à mon retour si je marche à coté de mes pompes...
A+
Ok désolé, j'avais pas compris votre demande...
Merci encore pour le temps que vous m'accordez
heu pardon mais c'est quoi le PQ ?
POWER QUERY, désolé je suis vraiment un inculte....
En pièce jointe je te remet ton fichier avec 1 macro et 2 fonctions.
La macro te transforme tes jeux d'échec en tableau de résultat.
Bon je l'ai pas fait de manière parfaite mais le tableau d'origine ne l'était pas non plus.
Le défaut c'est que le tableau d'origine n'est pas un tableau : Il comporte des cellules fusionnées et en plus une date toute seule sur sa ligne d'en tête qui vient la dedans comme un cheveux sur la soupe....
Donc il aurait peut-être mieux valu que je crée une dixième colonne pour ramener juste la date et son planning dans les colonnes a coté...
au lieu de ça je t'ai fait une "transposition sauvage" j'ai juste défusionné les cellules qui sont une calamité en VBA.
et ramené chaque planning à 13 lignes
Ce qui fait que tu as pour chaque mois 25 lignes d'entêtes avec la date. Je ne connais pas PQ mais à mon avis ça va bien t'embêter si tu comptais travailler avec...
Donc tu es condamné à travailler en VBA ou avec des formules pour tes comparaisons : Ça te musclera un peu les méninges toi qui voulait travailler un peu les Array ! ;) Ou alors il faudrait recalculer ma transposition avec une seule colonne d'en tête et une colonne supplémentaire de date... A toi de voir mais tu as un modèle qui te dégrossit un peu le problème...
Donc ma macro te transpose tes données dans chaque feuille à partir de la ligne 101 et tes données s’égrènent ligne par ligne toutes les 13 lignes par jour...
Comme je le disais précédemment cette disposition n'est peut-être pas idéale non plus pour faire des comparaisons jour par jour Il aurait peut être été préférable de transposer toutes les données d'une seule journée sur une seule colonne. Au lieu d'avoir un rectangle de 100 cellules tu aurais donc une colonne de 100 cellules ou tu retrouverais les mêmes données parsés différemment mais à mon avis ça serait sans doute plus pratique pour des comparaisons sur 16 mois
Dans cette hypothèse 16 mois x 25 jours ça te ferait tout juste 400 colonnes (enfin un peu mois parce qu'avec le chevauchement des semaines tu en auras quelques unes à supprimer...)
Chez moi la transposition est instantanée : Normal vu que les tableaux sont vides... J'ai toi ça prendra sans doute quelques instant de plus mais ça devrait pas être la mer à boire l'algo est efficace...
Après pour les comparaisons : Tu reviendras avec des données plus précises. Parce que ton laïus, pour moi, c'est du mandarin chinois parlé par une vache espagnole...
A si tu as une difficulté pour transposer les dates sur une colonne à gauche et avec un seul entête pour toute la colonne tu le dis, Je verrai à améliorer le truc...
Bon la décoration c'est pas mon fort. Hein ! Les Array c'est pareil ça te renvoie des données brutes hein... Pas de couleur ni de formatage particulier, c'est pour ça que c'est si rapide. Et comme dans certaines colonnes tu as des dates et des nombres décimaux ça va te renvoyer des #### mébon ça se corrige facilement...
Enfin tu verras...
Si tu comprends pas tu demandes... Je vais pas te faire un livre non plus hein !
A+
J'ai eu un petit remord de t'avoir pondu cette vacherie...
Du coup j'en ai refait une autre ou chaque jour de chaque mois est transposé sur une colonne unique à partir de la ligne 100
Donc tu as tout le 3 Janvier de la ligne 100 à 195
le 4 Janvier idem mais colonne B et ainsi de suite...
Pour les comparaisons ça va être dans un fauteuil et les doigts dans le nez...
Je ne me suis donné la peine de formater que les dates parce que c'est toujours un peu sensible. Pour le reste tu te débrouilleras bien !
Du coup la macro n'utilise qu'une des 2 fonctions (AdrA)
Seul bémol comme tes tableaux sont vides je ne peux pas trop vérifier mébon... YFO bien que je te laisse quelque chose à faire...
La macro :
Option Explicit
Dim Ws As Worksheet
Sub DateVersColonneUnique()
Dim ArrS, ArrC(95, 24), i%, iR%, iC%, ii%, Dec%, iD%, k%
Application.ScreenUpdating = False
For i = 2 To Worksheets.Count
With Worksheets(i)
ArrS = .Range("A1:AS88").Value2
Dec = 0
For iR = 1 To 73 Step 18
For iC = 1 To 45 Step 9
ArrC(0, Dec) = ArrS(iR, iC) 'Les Dates
Dec = Dec + 1
Next
Next
Dec = 0
For iD = 1 To 25 'Le corps...
ArrS = .Range(AdrA(Dec)).Value2
For k = 0 To 9
For iR = 1 To 9
ArrC(iR + k * 9, iD - 1) = ArrS(k + 1, iR)
Next
Next
.Cells(191, iD) = ArrS(12, 1) 'ici il reste à placer les totaux
.Cells(192, iD) = ArrS(12, 3)
.Cells(193, iD) = ArrS(12, 5)
.Cells(194, iD) = ArrS(12, 6)
.Cells(195, iD) = ArrS(12, 7)
.Cells(196, iD) = ArrS(12, 9)
Dec = Dec + 1
Next
.Range("A100:Y195") = ArrC
.Range("A100:Y100").NumberFormat = "m/d/yyyy"
For ii = 8 To 89 Step 9
.Range(.Cells(100 + ii, 1), .Cells(100 + ii, 25)).NumberFormat = "m/d/yyyy"
.Range(.Cells(100 + ii + 1, 1), .Cells(100 + ii + 1, 25)).NumberFormat = "m/d/yyyy"
Next
End With
Next 'et on passe à la feuille suivante
End SubBon WE
A+
Pour conclure :
Je t'ai fait le même mais dans l'autre sens. Ce qui fait que tu as toutes les dates en vertical dans la colonne 1 et les données du jour dans les colonnes suivantes.
Le formatage étant fait YAPUKA insérer une première ligne pour mettre les en-têtes qui correspondent et là, PQ y se régale !
Bon si tu veux encore jouer à VBA pour tes comparaisons tu peux mais à partir de cette présentations tu peux déjà pas mal exploiter les résultats : Tu n'as que l'embarras du choix, tableaux croisés, segments, formules : à toi de jouer !
"Galopin" envoie toutes les données vers la Feuille1 nommée Récap : YAPUKA lancer cette macro !
Attention : Vu que tes tableaux sont actuellement vides, je n'ai pas pu filtrer les doublons de dates vides sur les Fin de mois/Début de mois qui se chevauchent !
Comme de bien entendu, je ne suis pas exempt d'avoir laissé quelque bug mébon l'essentiel est fait !
A+
Merci énormément ! J'espère que j'aurais l'occasion de vous remercier !
J'ai quand même une question (désolé...
Dois-je faire le même système pour le classeur synoptique, étant donné que la plupart des comparaisons vont se faire entre ces deux classeurs ?
bonjour,
Franchement je n'ai toujours pas compris ce que vous voulez faire avec ce synoptique, j'ai compris plus loin dans la discussion avec les autres intervenants que l'intention était d'y faire des comparaisons, mais je ne vois pas trop lesquelles.
S'il y a des comparaisons à faire mon impression est que le dernier tableau que je vous ai servi est surement le plus approprié à faire ces comparaisons.
Comment et lesquelles ça je ne sais pas :
Lesquelles : Ce synoptique ne m'inspire guère, il faudra donc développer le sujet si vous voulez un exemple clair.
Comment : Là vous n'avez que l'embarras du choix. Excel regorge de possibilité... Tout dépend de vos compétences !
SQL n'est pas ma tasse de thé mais si vous êtes un habitué de cet instrument pourquoi pas.
PQ je ne connais pas mais surement.
Il reste les formules et VBA
Quel que soit votre choix, YAPUKA mettre des en-têtes sur le dernier tableau pour que vous en tiriez le maximum. En effet Excel est un tableur et on en obtient le quintessence à partir de tableaux normalisés. C'est la raison pour laquelle je me suis évertué à rendre vos données plus "lisibles."
A partir de ce tableau rien ne vous empêche d'importer la feuille dans votre synoptique (quitte à la détruire ensuite....)
Mais vous pouvez aussi en utiliser les données en tant qu'Array : Une fois les en-têtes déterminés vous aurez donc un tableau de 376 lignes et 97 colonnes.
Un peu moins de lignes en fait, une fois les lignes vides correspondant à des doublons de dates supprimés il vous en restera sans doute environ un peu plus de 300....
Si vous choisissez d'utiliser VBA vous aurez juste à faire un :
Sub Test
Dim ArrSource
ArrSource = WsR.Range("A376:CQ97").Value2 et vous aurez toutes vos données sur un plateau...
Pour les autres systèmes en particulier PQ vous aurez d'autres contributeurs qui s'éclatent avec ce produit, je ne voudrai pas les priver...
Mais vous pourriez sans doutes tout aussi bien faire un maximum d'analyses avec les formules, TCD, segments et autres joyeusetés dont regorge Excel !
A+
Bonjour Galopin,
je suis entrain d'essayé de comprendre votre code afin de pouvoir le réutiliser pour le classeur synoptique...
Du coup je n'arrive pas à comprendre le symbole % dans vos déclarations de variables ? A quoi sert il ?
Merci par avance
% dans une déclaration est l'équivalent de As Integer
& ... As Long
# ... as Double
! ... As Single
$ ... as String
Il n'existe pas d'autre abréviation pour les autres types.
A+
Merci beaucoup, c'est en effet plus rapide...
Bonjour M. Galopin,
je reviens vers vous une nouvelle fois ....
J'ai adapté votre code de transposition à mon deuxième classeur (synoptique).
un tri par onglet puis une transposition sur un onglet "RECAP" de tout les autres onglets...
sur chaque onglet ça se passe plutôt bien, mais le problème vient de la transposition sur l'onglet "RECAP".
au lieu de me traiter ça ligne par ligne (une date par ligne) il m'incrémente une date par colonne.
j'y ai passé tout le Vendredi pour un problème qui à la base ne me paraissait pas insurmontable mais malheureusement je ne comprends pas ce qu'il faut que je change pour avoir le résultat escompté...
Auriez vous, une nouvelle fois, s'il vous plais la gentillesse de m'aiguiller sur ce sujet ?
(je vous joint mon code ainsi que le classeur... )
RESULTAT OBTENUE :
| 03/01/2022 |
| PALOMA |
| BAT A |
| RDC |
| 20 |
| 60 |
RESULTAT VOULU:
| 03/01/2022 | PALOMA | BAT A | RDC | 20 | 60 |
Option Explicit
Function AdrB(i)
Dim Arr1
Arr1 = Split("I68:N102 X68:AC102 AM68:AR102 BB68:BG102 BQ68:BV102 CF68:CK102 CU68:CZ102 DJ68:DO102 DY68:ED102 EN68:ES102 FC68:FH102 FR68:FW102") 'DATES / CHANTIERS / BATIMENT / ETAGE / CA / NB TUBE
AdrB = Arr1(i)
End FunctionOption Explicit
Dim Ws As Worksheet
Sub Synoptique() 'Transfert et Transposition vers Wsr (Feuille Récap)
Dim ArrS, i%
Application.ScreenUpdating = False
DateSynoVersColonneUnique 'Prétraitement
DoEvents
For i = 2 To Worksheets.Count
With Worksheets(i)
ArrS = .Range("A165:F584").Value2
WsRS.Cells(1 + ((i - 2) * 6), 1).Resize(UBound(ArrS, 2), UBound(ArrS, 1)) = Application.Transpose(ArrS) '1 + ((i - 1) * 419) /
End With
Next
For i = 1 To Worksheets.Count
WsRS.Range(WsRS.Cells(1, 1), WsRS.Cells(i * 12, 1)).NumberFormat = "m/d/yyyy"
Next
End Sub
Sub DateSynoVersColonneUnique(Optional Bidon = 0) 'On envoie toutes les données réorganisées vers m^me feuille : ligne 100
Dim ArrS, ArrC(419, 11), i%, iR%, iC%, ii%, Dec%, iD%, k%
For i = 2 To Worksheets.Count
With Worksheets(i)
Dec = 0
For iD = 0 To 11 'Le corps...
ArrS = .Range(AdrB(Dec)).Value2 'Arrs = Nom chantier+Bat+Etage+Nb Prix+Tb estim+Nb Tub reel+Etat rea+Date prev+Date def d'une journée / Dec = chaque batiment sur un onglet(chantier) / 2eme batiment...
For k = 0 To 34 'les 35 lignes de chaque bâtiment représentée dans Arrs
For iR = 0 To 5 'les 6 colonnes de chaque batiment représentée dans Arrs
ArrC(k + iD * 35, iR) = ArrS(k + 1, iR + 1) 'reprise du tableau ArrC à partir de la position(0,0) jusqu'à position(419,5) puis remplissage par variante Arrs/journée puis rotation sur journée suivante = à la 2 dimensions déjà remplie en position(0,...) par la date de la journée
Next
Next
Dec = Dec + 1
Next
.Range("A165:F584") = ArrC
.Range(.Cells(165, 1), .Cells(584, 1)).NumberFormat = "m/d/yyyy"
End With
Next 'et on passe à la feuille suivante
End Sub
Hey !
Ben là ça a plus grand chose à voir avec ce que je t'ai proposé.
Essaie :
Sub Galopin()
Dim ArrS, Dec%, i%, k%, kk%
For i = 2 To Worksheets.Count
With Worksheets(i)
ArrS = .Range("A165:F584").Value2
For k = LBound(ArrS) To UBound(ArrS)
Dec = Dec + 1
For kk = 1 To 6
WsRS.Cells(Dec, kk) = ArrS(k, kk)
Next
Next
End With
Next
WsRS.Range("A1:A" & Dec).NumberFormat = "m/d/yyyy"
End SubA+
Merci beaucoup ça marche parfaitement !
maintenant je commence les comparaisons....
Bonne journée
Plutot que de vous laisser faire quelque chose d'inutile montrez nous tout de suite ce que vous voulez comparer et avec quoi vous voulez le comparer et ce que vous voulez faire du résultat (ou plus exactement quel est le résultat souhaité). Et on essaiera de vous mettre sur la piste de la bonne méthode...
A+
Vous êtes trop fort ! Alors je vais essayé d'être le plus claire possible...
Mon premier problème c'est que je vous ai mal orienté par rapport à l'onglet RECAP(WsR).
Votre idée de condenser toutes les informations de tout les mois "planning" était effectivement la bonne.
Mais le problème c'est que ce tableau (mis à part les dates en colonne A) va devoir être renseigné par le tableau synoptique... Donc au lieu de rassembler les informations des mois sur le recap, il faudrait renseigner le recap (avec le le tableau synoptique) puis du recap aller renseigner chaque onglet du planning. En fait c'est le contraire de ce que je vous ai demandé à la base.... désolé...
Pour ce qui est des "comparaisons" :
Tableau SYNOPTIQUE (ONGLET RECAP)
DATE CHANTIER BATIMENT ETAGE CA NB DE TUBE
| 0 | 0 | ||||
| 0 | 0 | ||||
| 03/01/2022 | PALOMA | BAT A | RDC | 20 | 60 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 17/01/2022 | PALOMA | BAT A | R+1 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 31/01/2022 | PALOMA | BAT A | R+2 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 14/02/2022 | PALOMA | BAT A | R+3 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 28/02/2022 | PALOMA | BAT A | R+4 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 14/03/2022 | PALOMA | BAT A | R+5 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 28/03/2022 | PALOMA | BAT A | R+6 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 11/04/2022 | PALOMA | BAT A | R+7 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 25/04/2022 | PALOMA | BAT A | R+8 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 09/05/2022 | PALOMA | BAT A | R+9 | 0 | 0 |
| 0 | 0 | ||||
| 0 | 0 | ||||
| 23/05/2022 | PALOMA | BAT A | R+10 | 0 | 0 |
Tableau PLANNING (ONGLET RECAP)
| 03/01/2022 | ||||||
| 04/01/2022 | ||||||
| 05/01/2022 | ||||||
| 06/01/2022 | ||||||
| 07/01/2022 | ||||||
| 10/01/2022 | ||||||
| 11/01/2022 | ||||||
| 12/01/2022 | ||||||
| 13/01/2022 | ||||||
| 14/01/2022 | ||||||
| 17/01/2022 | ||||||
| 18/01/2022 | ||||||
| 19/01/2022 | ||||||
| 20/01/2022 | ||||||
| 21/01/2022 | ||||||
| 24/01/2022 | ||||||
| 25/01/2022 | ||||||
| 26/01/2022 | ||||||
| 27/01/2022 | ||||||
| 28/01/2022 | ||||||
| 31/01/2022 | ||||||
| 01/02/2022 | ||||||
| 02/02/2022 | ||||||
| 03/02/2022 | ||||||
| 04/02/2022 | ||||||
| 07/02/2022 | ||||||
| 08/02/2022 | ||||||
| 09/02/2022 | ||||||
| 10/02/2022 | ||||||
| 11/02/2022 | ||||||
| 14/02/2022 | ||||||
| 15/02/2022 | ||||||
| 16/02/2022 | ||||||
| 17/02/2022 | ||||||
| 18/02/2022 | ||||||
| 21/02/2022 | ||||||
| 22/02/2022 |
Bon alors je vais essayer de vous expliquer tout ça sans trop rentrer dans les détails, je rajouterai les subtilités moi même histoire de ne pas trop abuser:
je souhaiterai que quand une date du tableau synoptique (colonne A) corresponde au tableau planning (colonne A), les colonnes B-C-D-E-F du tableau synoptique viennent s'agrémenter sur ces m^mes colonnes mais du tableau PLANNING.
J'ai donc pensé dans un premier temps de réadresser ces 2 tableaux dans deux fonctions tab à 2 dimensions mais le problème c'est qu'il sont sur 2 classeurs différents et je ne suis pas encore très à l'aise sur ce point.
Ensuite le deuxième soucis c'est que sur le tableau planning il va y avoir forcément plusieurs dates à incrémenter le même jour donc il faudrait que ca se décale de 9 colonnes vers la droite si les 9 premières sont déjà remplies et ainsi de suite...
D'autres étapes doivent être pris en compte (le nombre de tube max par jour, la prise en compte d'une liste de jours de congés et ou fériés) mais comme je vous l'ai dit ci-dessus " je rajouterai les subtilités moi même histoire de ne pas trop abuser"
Désolé une nouvelle fois pour le "laïus" mais je ne sais pas comment vous expliquer autrement....