XL 2019 Transformer des lignes de codes pour pratiquer Tablo à 4 colonnes et 40 lignes

  • Initiateur de la discussion Initiateur de la discussion Webperegrino
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Webperegrino

XLDnaute Impliqué
Supporter XLD
Rien d'urgent et ... dans la continuité de la discussion 'https://excel-downloads.com/threads...pave-de-cellules-contenant-des-vblf.20087184/'

Bonsoir Le Forum,
J’en appelle aux spécialistes des Tableaux à 4 dimensions d(40,4), comme l’a fait Job75 dans le vba ci-joint dans le fichier (que je remercie encore car c'est une formulation redoutable par sa rapidité).
Je cherche justement par ce procédé à améliorer mes lignes de codes dans le module 1 et dans la Feuille FICHPOSINDIV.

Mon problème :
La macro fonctionne déjà bien comme cela : elle extrait des données en cellules jaunes la Feuille PANORAMIQUE.
Ces cellules peuvent éventuellement être au nombre de 10 x 82 = 820 si toutes jaunes et contenant donc des données à analyser.
Le placement final de la macro s’affiche sous conditions en une fiche individualisée, après le choix en [B4] de FICHPOSTINDIV du prénom à rechercher dans PANORAMIQUE.

Au milieu du Module 1, j’ai un « For...Next » qui pourrait être traité avec tablo(40,4))...(tableau à 40 lignes et 4 colonnes) à la façon de lignes rédigées par Job75 plus bas dans la macro...
La durée serait que la macro serait certainement réduite ... mais je ne sais pas faire avec 4 variables ; je m'y perds même en essayant de comprendre les astuces de Monsieur Boisgontier sur son site que lui et sa famille ont bien voulu nous laisser disponible.
Donc si vous pouviez m’aider dans les lignes suivantes, ce serait grandiose pour moi.
Merci
Webperegrino

VB:
For lg = 28 To 37
   For col = 7 To 88
      If PAN.Cells(lg, col) <> "" Then '------- une case occupée de PAN
            lgd = Ri.Range("C" & Rows.Count).End(3).Row + 1
            If lgd < 9 Then lgd = 9
            If PAN.Cells(lg, col) Like "*" & Ri.[B4] & "*" Then 'traitement de cases contenant le caissier Ri.[B4]
            Ri.[I13] = 1
            Ri.Cells(lgd, 2) = PAN.Cells(lg, 5) '----- le jour
            If lgd = 9 Then nbP = nbP + 1 'NOMBRE DE JOURS EN POSTE
            If lgd > 9 And Ri.Cells(lgd, 2) <> Ri.Cells(lgd - 1, 2) Then nbP = nbP + 1
            Ri.Cells(lgd, 3) = PAN.Cells(165, col)
            Ri.Cells(lgd, 3).Interior.Color = PAN.Cells(165, col).Interior.Color 'mise en coloration
            Ri.Cells(lgd, 3).Font.ColorIndex = PAN.Cells(165, col).Font.ColorIndex
            Ri.Cells(lgd, 3).Font.Bold = True 'False
            Ri.Cells(lgd, 4) = PAN.Cells(lg, col)
            Ri.Cells(lgd, 5) = PAN.Cells(166, col)
            Ri.Cells(lgd, 36) = PAN.Cells(5, col)
      End If
      End If
   Next col
Next lg
 

Pièces jointes

Bonjour le fil,
Je n'ai pas bien compris la notion de 4 variables.
Ce que j'ai compris.
Les boucles sont :
VB:
For lg = 28 To 37
   For col = 7 To 88
Serait ce transformer les boucles en 40 lignes et 4 colonnes soit :
VB:
For lg = 1 To 40
   For col = 1 to 4
Depuis mon téléphone
Bonne fin de soirée
Jean marie
 
Dernière édition:
Le Forum,
Bonsoir ChTi160,
Merci de vous intéresser à ma demande.
Oui, je m'exprime certainement mal sur la notion de "Tableaux de variables (Arrays)" que je ne sais pas concevoir et qui me permettrait de stocker des valeurs de PANORAMIQUE pour les placer dans 4 colonnes de FICHPOSTINDIV.

Il s'agit d'une approche de macros selon celles que nous voyons dans le site de Monsieur Boisgontier, http://boisgontierj.free.fr/pages_site/tableaux.htm#Declaration, dans son chapitre "DECLARATION DES TABLEAUX".

En effet dans la Feuille FICHPOSTINDIV, les bonnes valeurs provenant de la Feuille PANORAMIQUE (des lignes 28 à 37 et des colonnes 7 à 88) se placeront sur 4 colonnes : B, C, D et E, de la ligne 9 à la ligne 40 maximum.
Donc 4 colonnes pour ma "notion de 4 variables."
Plus bas, dans les lignes de codes actuellement en place en Module 1, Job75 applique ceci :
VB:
tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments

J'imagine que le travail pourrait alors se faire sur le principe :
      tablo = .Resize(, 4) 'matrice, plus rapide, au moins 4 éléments
      ub = UBound(tablo)
      For i = 1 To UBound(tablo)
      ...
Webperegrino
 
Le Forum,
Bonjour TooFatBoy,
Gloups ! Alors je comprends de moins en moins ces tableaux à x variables.
Voici mon approche :


1746694869464.png


A l'évidence, je vais devoir me documenter un peu plus pour trouver une bonne pédagogie pour l'appliquer dans le cas sur lequel je planche depuis plusieurs jours (nuit et jour), même en rêve avec des idées nouvelles mais fausses à chaque réveil...
Webperegrino
 
Le Forum,
ChTi160, TooFatBoy,
Merci.
Je continue dans mes recherches.
Est-bien que je continue dans ce sens ?

VB:
Sub Tableau40·4()
ReDim tbl(1 To 40, 1 To 4)
'ou ...   ReDim Preserve Tablo(0 To 39, 0 To 3)
'pour écrire dans tableau
For ligne = 1 To UBound(tbl)
  For colonne = 1 To LBound(tbl)
    tbl(ligne, colonne) = ligne + colonne
    ' Tablo(0, x) = Cells(i, 1) '(Col 0 / Ligne x)
    'tablo(1, x) = Cells(i, 2) '(Col 1 / Ligne x)
    'tablo(2, x) = Cells(i, 3) '(Col 2 / Ligne x)
    'x = x + 1
  Next colonne
Next ligne
' For ligne = 1 To UBound(tbl)
For colonne = 1 To LBound(tbl)
  Cells(ligne, colonne).Value = tbl(ligne, colonne)
Next colonne
Next ligne
End Sub

Merci d'être indulgents : je ne connais rien à la conception de ces tableaux.
Je sais seulement que ce serait bien d'en placer un dans mes lignes de vba ; l'analyse du gros pavé des cellules de PANORAMIQUE.[G7 : CJ37] se ferait alors très, très rapidement pour inscrire le résultat en cellule FICHPOSTINDIV.[B4]
Webperegrino
 
J'ai préparé ceci, mais ça "bug" ...
VB:
'exemple:tableau 40 lignes 4 colonnes
Sub Tableau40·4()
ReDim tbl(1 To 40, 1 To 4)
'ou ...   ReDim Preserve Tablo(0 To 39, 0 To 3)
'pour écrire dans tableau
Set Ri = Sheets("FICHPOSTINDIV")
Set PAN = Sheets("PANORAMIQUE")
With PAN
  Set dep = PAN.[G7]
  Set lst = PAN.[CJ37]

  For ligne = 1 To UBound(tbl)
    For colonne = 1 To LBound(tbl)
      If PAN.Cells(ligne, colonne) Like "*" & Ri.[B4] & "*" Then
        tbl(ligne, colonne) = ligne + colonne
        ' Tablo(0, x) = Cells(i, 1) '(Col 0 / Ligne x)
        'tablo(1, x) = Cells(i, 2) '(Col 1 / Ligne x)
        'tablo(2, x) = Cells(i, 3) '(Col 2 / Ligne x)

  'ici je ne sais pas gérer PAN.(jours colonne E), Post Colonne C, et Droit Repas ligne 166)
  'pour bon placement dans RI en colonne B, Colonne D et colonne E

      End If
      'x = x + 1
    Next colonne
  Next ligne
End With

With Ri.[B9]
' For ligne = 1 To UBound(tbl)
For colonne = 1 To LBound(tbl)
  Ri.Cells(ligne, colonne).Value = tbl(ligne, colonne)
Next colonne
End With
End Sub

... de plus, je crains que la couleur et la graisse en Ri.[D9 à D40] soir shuntée.
Webperegrino
 
Re
Il te faut boucler sur ton tableau de données pour ensuite remplir ton tableau"tbl"
Ce qui doit donner . Pour chaque ligne de ma Base de données, pour chaque colonne de cette ligne de base de données si la cellule ligne colonne correspond a ce que recherche alors je vais ajouter une ligne à mon tableau "tbl" exemple redim Préserve tbl(4,x) 4 étant les colonnes et x la ligne que j'ai trouvé.
Puis tu remplies
VB:
tbl(1,x)= ta cellule (lgn,2) 
tbl(2,x)= ta cellule (lgn,3) 
tbl(3,x)= ta cellule (lgn,4) 
tbl(1,x)= ta cellule (lgn,6)
Pour l'exemple
Jean marie
Edit : Depuis mon téléphone
 
Dernière édition:
Est-bien que je continue dans ce sens ?
Je ne saurais te dire. 😕


Je sais seulement que ce serait bien d'en placer un dans mes lignes de vba ; l'analyse du gros pavé des cellules de PANORAMIQUE.[G7 : CJ37] se ferait alors très, très rapidement pour inscrire le résultat en cellule FICHPOSTINDIV.[B4]
Perso je travaille directement dans les feuilles, sans passer par des tableaux, car je n'ai jamais besoin de travailler à la vitesse de la lumière.
 
Le Forum,
Bsalv,
Ce que vous avez proposé me passionne.
L'action de "dépivotage" de Panoramique dans cette nouvelle feuille BDD va grandement me servir. Bravo !

Toutefois, comme expliqué plus haut dans la discussion, et pour respecter ce qui est demandé par l'application Excel, plus lourde, et que j'ai construite pour l'association dans laquelle mon épouse l'utilise dans le cadre du bénévolat pour gérer son équipe, nous devons rester en mutation d'extraction de PANORAMIQUE directement dans FICHPOSTINDIV, selon la requête du prénom en [B4].
Mais je m'aperçois aussi que votre nouvelle affichage BDD va grandement nous servir.
Alors merci.

Je continue mes recherches et essais selon l'approche du #9, pour remplacer éventuellement une partir du vba qui donne déjà les résultats voulus.
Bien cordialement,
Webperegrino
 
Dernière édition:
Hello,


Juste un détail : il n'y a que deux dimensions dans ton tableau et non quatre. 😉
En effet 2D
un petit exemple si tu veux traiter réellement un espace vectoriel de 4 dimensions

VB:
Option Explicit
Option Base 1

Sub T4D()

Dim vEspaceVectorielDim4(10, 10, 5, 5) As Integer
Dim iw As Integer, ix As Integer, iy As Integer, iz As Integer
For iw = 1 To 10
    For ix = 1 To 10
        For iy = 1 To 5
            For iz = 1 To 5
                vEspaceVectorielDim4(iw, ix, iy, iz) = 1
            Next
        Next
    Next
Next
End Sub

dans un passé lointain les espaces vectoriels c'était mon sujet préféré dans une certaine matière 😉

Une petite révision sur ces notions... 🙂
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour