Macro décalage tableau dynamique

Bonjour,

Je fais mes premiers pas en VBA pour le travail et je me "casse" un peu les dents sur ma macro...

J'avoue immédiatement que j'ai récupérer une "base" (qui ne permettait pas vraiment ce que je voulais, sinon l'export des données) et... je l'ai bidouillé pas mal: il y a donc surement de l'écriture un peu "brutale" (vis l'enregistrement de macro).

Cette macro a pour but de récupérer les données dans un dossier (d'un appareil d'analyses) et de les exporter/trier en fonction de critères.

Pour l'instant ma macro génère l'onglet "All_data".

Mon problème:

une fois ce tableau généré, il me faudrait réaliser un "décalage" des colonnes (à partir de D) pour que les 5 critères de chaque "Analysis number (SIGXXX)" s'aligne en fonction du critère RT ou Compound.

Le but est que les critères RT ou Compound s'alignent pour permettre plus tard d'analyser les données de façon automatique.

Pour illustrer mon besoin, j'ai fait (manuellement) le décalage dans l'onglet "All_data_final". Bien sûr j'ai un peu zappé la mise en forme (j'ai d'ailleurs pas encore rajouté les bordures mais bon...) mais l'important est vraiment le décalage de colonnes.

S'il y a des âmes charitables pour m'aider!!!

19macro-fid.xlsm (86.21 Ko)

Salut Pierre,

sauf erreur ou divagation fatale, ça devrait rouler! 8)

A vérifier : à mon sens, il y a des valeurs 'sans en-tête' qui devraient se trouver dans la même colonne là où tu les dédoubles. De mémoire, entre autres, entre 16:1 et 17:1(IS).

Pour l'heure, c'est le petit bouton rouge (petite habitude à moi ) qui démarre la macro mais, si elle convient, elle sera judicieusement appelée en fin de procédure d'extraction, ce qui 't'économisera' une feuille!

Private Sub cmdGO_Click()
'
iRow = UsedRange.Rows.Count
iCol = 3
'
Application.ScreenUpdating = False
'
Do
    iMove = 0: sMin = "": iSans = 0
    iCol = iCol + 1
    sCol = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
    For x = 1 To 2
        For y = 3 To iRow - 3 Step 5
            If x = 1 Then
                'collecte des infos
                If Cells(y + 1, iCol) <> "" Then iMove = 1
                If Cells(y, iCol) = "" Then iSans = 1
                If Cells(y, iCol) < sMin Or sMin = "" Then sMin = Cells(y, iCol)
            Else
                'remise en ordre
                If (iSans = 1 And Cells(y, iCol) <> "") Or Cells(y, iCol) > sMin Then Range(sCol & y - 1 & ":" & sCol & y + 3).Insert shift:=xlToRight
            End If
        Next
    Next
Loop Until iMove = 0
'
'encadrements
For x = 2 To iRow - 4 Step 5
    iCol = Cells(x, Columns.Count).End(xlToLeft).Column
    sCol = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
    Range("D" & x & ":" & sCol & x).BorderAround LineStyle:=xlContinuous
    Range("D" & x & ":" & sCol & x).Interior.Color = RGB(240, 200, 0)
    For y = 4 To iCol
        sCol = Split(Columns(y).Address(ColumnAbsolute:=False), ":")(1)
        Range(sCol & x & ":" & sCol & x + 4).BorderAround LineStyle:=xlContinuous
    Next
Next
'
Application.ScreenUpdating = True
'
End Sub

Bon travail!

A+

8macro-fid.xlsm (83.67 Ko)

Bonjour curulis57,

En premier bien sûr un grand merci, en si peu de temps pour un problème qui me paraissait "insurmontable", ça fait rêver!

Bien sûr ton programme marche nickel (ou du moins pour ce que j'en ai vu, je vais tester sur différents fichiers d'analyses).

Si j'ai bien compris, je peux intégrer le code que tu m'as écris à la suite du mien pour que tout ce fasse en même temps, c'est bien ça?

Car sinon le problème c'est que, si je refais tourner ma macro sur un autre fichier d'analyse, je n'ai pas ton "petit bouton rouge" sur la page créée (il reste uniquement dans l'onglet ou tu l'as placé, ce qui me semble normal). De toutes façons, je n'ai pas besoin de garder le tableau intermédiaire, donc si je peux faire les deux opérations en même temps c'est nickel.

Un grand merci aussi pour le "bonus" des mises en forme (je travaille et "bidouille" en même temps pour arriver à comprendre le fonctionnement de la programmation... et apprendre sur le tas).

Vu les nouveaux besoins que j'ai en programmation excel (nouveau travail), j'espère vraiment arriver à "apprendre" les bases pour m'aider au travail. J'ai vu qu'il y avait une rubrique "cours VBA" sur ce site, je pense que je vais regarder ça!

Encore une fois merci beaucoup... si tu ne peux pas répondre tout de suite, je vais quand même essayer d'intégrer ton code dans ma macro pour voir si je peux tout faire d'un coup: je reviens vers toi si j'y arrive seul

Rebonjour curulis57,

Bon alors j'ai commencé à essayer d'insérer ton code dans ma macro pour que les opérations s’enchaînent directement et que je n'ai que le tableau final... sans grand succès

C'est vraiment rageant car là je suppose qu'il s'agit d'un problème de "base" (de débutant en gros!).

Pourtant si j'ai bien compris ta phrase "mais, si elle convient, elle sera judicieusement appelée en fin de procédure d'extraction, ce qui 't'économisera' une feuille!", ça me laisse penser qu'il est possible de faire enchaîner les deux opérations (ou à minima de faire apparaître le bouton rouge dans l'onglet "All_data" lors de sa création par ma macro)

Bref, si tu as encore un moment à me consacrer pour m'aider à finir le programme, ça serait vraiment gentil...

Salut Pierre,

voici ton fichier avec les transformations suggérées. A tester!

La macro est déplacée dans le Module1 sous le nom 'MiseEnForme'.

Elle est appelée en fin de procédure 'Export_Data' par : Call MiseEnForme.

Quid à propos des 'supposées' erreurs de colonnage de ta mise en forme manuelle?

Avec plaisir!

A+

17macro-fid.xlsm (73.64 Ko)

Bonjour curulis57,

Que dire sinon encore merci?!?

J'espère que je ne suis pas trop vieux pour apprendre la logique (et surtout le langage!) de programmation mais en tout cas c'est vraiment motivant quand une communauté te soutien dans cette démarche!

Donc après un petit test, ça marche nickel (mais tu t'en doute, pas vrai )

Pour ton interrogation je vais regarder mais je là je suis en congés "garde d'enfants en vacances scolaires" (pas trop de temps pour moi donc!), je n'ai donc pas accès au données de l'appareil.

Pour te décrire quand même mieux le système de l 'appareil, la ligne RT correspond à un temps (en min) où l'on voit si l'on a une réponse (une "aire", une "hauteur") et qui peut (ou pas) correspondre à un "composé" identifié (pour info, c'est de la chimie analytique, type "les experts").

Le but serait bien sûr d'avoir toujours un "composé" en face des RT/aire/hauteur mais on ne le connait pas toujours (il est donc "non identifié")

Le vrai tri devrait donc se faire sur la ligne RT mais le but est principalement d'identifier la présence (ou l’absence) des "composés": c'est pour ça que je laisse les colonnes "composés" même s'il n'y a pas de réponse (RT=0 signifiant rien de détecté au temps de ce composé).

Ta question sur la séparation ou pas des colonnes est donc très perspicace (sans vouloir te flatter, mais il est vrai que même des personnes qui travaillent sur l'appareil ne se posent pas toujours assez la question!) mais il me faudrait être devant l'appareil pour te répondre... car la vrai question est: si le temps est légèrement différent, est-ce des signaux différents ou est-ce simplement l'incertitude de mesure qui donne des résultats légèrement différents?

Une grande question donc mais là ça sort de la simple logique pour toucher à "l'expertise" du domaine: pas sûr que l'on puisse programmer ça donc.

Après je me suis peux être aussi simplement "loupé" sur mon tri (j'ai pas regardé assez )!

Dans tous les cas merci beaucoup, je regarde mieux lundi prochain pour tout vérifier.

PS, une question idiote sur le fonctionnement du forum: si je fais "problème résolu" (car dans les faits c'est le cas!), je dois reposer refaire un autre sujet si finalement j'ai encore une interrogation?

Salut Pierre,

pour une question en rapport direct avec ta demande (adaptation, correction), pas de souci.

Si ta demande concerne un aspect différent de ton projet, c'est mieux de créer un nouveau sujet pour laisser la possibilité à tout le monde de s'y intéresser!

Bonne garde!

A+

Rechercher des sujets similaires à "macro decalage tableau dynamique"