Problème de macros

D277

XLDnaute Nouveau
Bonjour à tous,

Mon sujet étant assez vague, je vais développer :

Dans le fichier joint (modifié pour données professionnelles), se trouve un grand tableau résultant d'une extraction de données.
Pour chaque essai, correspond un certain nombre de tests avec 6 paramètres chacun.
L'extraction étant "brute", quelques petits détails de clarté apparaissent.
Je m'explique : un essai peut avoir un nombre aléatoire de tests, mais pas forcément dans l'ordre numérique logique (ex : un test 2 et 3 mais pas de test 1 /// ou un test 3 et 5 mais pas les autres).

Dans le VBE, vous trouverez 2 macros déjà assez complexes pour moi même si j'en ai compris le sens à l'aide des explications de la personne les ayant écrites. La première permet de récupérer les tests de chaque essai et de les mettre les uns en-dessous des autres. La macro recherche donc pour chaque essai un test, si il en trouve un, il insère une ligne et le copie/colle et ainsi de suite.

La seconde macro permet de récupérer les valeurs "isolées" se trouvant en bout de feuille (en gras et rouge) et de les recoller à leur place dans les cases Paramètre 1 de chaque essai si il y a lieu.
Pour être plus clair, ce paramètre 1 se décline chez nous en plusieurs "sous-paramètre" ; voilà pourquoi je les ai nommé différemment et pourquoi ils sont en bout de tableau.

Plutôt que du bla bla, un exemple de ce qu'il doit en théorie se passer :
En ligne 54, vous remarquerez que la case Paramètre 1 (colonnes F et L) sont vides pour les 2 tests que contient cet essai. Les valeurs se trouvent respectivement en colonne AU et AV. La seconde macro remet ces valeurs en F et L, et la première macro prend les données du Test 2 et les copie/colle en-dessous de celles du Test 1.

LE problème, c'est qu'en changeant les variables de ces macros et donc en adaptant ces variables pour cette extraction de données nouvellement réalisée, cela ne fonctionne plus, les valeurs récupérées se retrouvent à la mauvaise place et certains tests pour certains essais ne sont pas déplacés.

En espérant avoir été clair, car moi-même je m'y perds un peu, j'espère que quelqu'un pourra m'aider et je reste à disposition pour éclaircir un peu plus si besoin.

Merci à tous et bonne journée

D277
 

Pièces jointes

  • Etude PRO.xlsm
    82 KB · Affichages: 29

Modeste

XLDnaute Barbatruc
Re : Problème de macros

Bonsoir D277,

En l'absence d'autre réponse, un essai en pièce jointe: je copie les données dans un tableau pour gagner un peu en vitesse et je recopie les données de tes "colonnes rouges" avant de recréer les nouvelles lignes.

Comme je ne suis pas certain d'avoir tout compris, je colle le résultat dans une autre feuille ... on peut changer par la suite, mais vérifie d'abord si le résultat est celui que tu recherches.
 

Pièces jointes

  • Etude PRO (D277).xlsm
    78.4 KB · Affichages: 18

D277

XLDnaute Nouveau
Re : Problème de macros

Bonjour Modeste,

Tout d'abord excuse moi de ne répondre que maintenant, je suis vraiment débordé ces derniers temps.
Et oui, ta macro correspond tout à fait à ce que je voulais.
C'est impeccable, UN GRAND MERCI !

Est-ce que tu pourrais quand tu auras le temps me fournir quelques explications sur ton programme histoire que je le comprenne en détails ?

Encore merci

Bonne journée

D277
 

Modeste

XLDnaute Barbatruc
Re : Problème de macros

Bonjour,

J'ai commenté le code ... vois si ça répond à tes questions (et dis-nous si ce n'est pas le cas!)

Précision importante: J'ai considéré qu'il n'y aurait jamais, dans les "colonnes rouges" deux valeurs pour le même "test". Exemple: tu as "Test 1" en colonnes AQ et AU; seule une des deux contenait parfois une donnée, mais pas les deux! J'ai vérifié, la fois passée et ce ne semblait pas être le cas ... mais c'est toi qui connaît la réalité!
VB:
Sub autreEssai()
Application.ScreenUpdating = False
'*** la première partie recopie les valeurs des colonnes "rouges" dans les premières colonnes ***
'on repère le n° de la dernière cellule non-vide en colonne A de la feuille Mois
ligfin = Cells(Rows.Count, 1).End(xlUp).Row
'on passe en revue toutes les cellules qui contiennent une constante
'de AP10 à la dernière ligne sur 9 colonnes de largeur
For Each c In [AP10].Resize(ligfin - 9, 9).SpecialCells(xlCellTypeConstants)
    'pour chaque constante trouvée, on cherche la position de la valeur figurant en ligne 7 de la même colonne
    'dans la plage A7:AO7
    colTest = Application.Match(Cells(7, c.Column), [A7:AO7], 0)
    'on copie la constante en question, dans la même ligne, dans la colonne trouvée à la ligne précédente
    Cells(c.Row, colTest) = c
Next c

'*** la seconde partie copie dans un tableau en mémoire les données de départ, en examinant des blocs de 6 colonnes
Dim tablo()
'de la ligne 10 à la dernière
For lig = 10 To ligfin
    'de la 6e à la 36e colonne, par pas de 6
    For col = 6 To 36 Step 6
        'si le "bloc" de 6 cellules n'est pas vide
        If Application.CountA(Cells(lig, col).Resize(1, 6)) > 0 Then
            'on redimensionne un tableau de 10 lignes et 1 colonne (puis une 2e colonne, puis une 3e, etc au fur et à mesure des besoins)
            ReDim Preserve tablo(10, x)
            'une première boucle copie dans le tableau les données des 5 premières colonnes de chaque ligne
            For y = 0 To 4
                tablo(y, x) = Cells(lig, y + 1)
            Next y
            'une seconde boucle se charge de la copi des données figurant plus loin dans la ligne, pour le "bloc" de 6 cellules
            For y = 5 To 10
                tablo(y, x) = Cells(lig, col + y - 5)
            Next y
            x = x + 1
        End If
    Next col
Next lig
'on colle le contenu du tableau en Feuil2, on le "transposant" (les lignes deviennent les colonnes et inversement)
Sheets("Feuil2").[A10].Resize(x, 11) = Application.Transpose(tablo)
Application.ScreenUpdating = True
End Sub
 

D277

XLDnaute Nouveau
Re : Problème de macros

Bonjour Modeste,

En effet, tes explications répondent à mes questions et tu avais raison : il ne peut pas y avoir 2 valeurs isolées pour le même Test.
Encore désolé de ne pas avoir répondu "dans les temps", mais je suis vraiment débordé.
Un GRAND MERCI, c'est impecc' !!

Bonne journée

D277
 

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan