HELP - MACRO EXCEL - REORGANISATION DONNEES

Fermé
Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016 - 8 août 2016 à 16:48
 Utilisateur anonyme - 12 août 2016 à 01:28
Bonjour,

Je suis novice en macro excel / visual basic.

J'ai un problème à résoudre concernant des réorganisations de données.
Je joins une photo pour décrire mon problème (à gauche la base ; à droite le résultat) : c'est comme un tableau croisé dynamique mais comme il y a des données textes je ne peux utiliser cette fonction.
J'ai des échantillons analysés avec différents paramètres (un échantillon n'a pas toutes les analyses) et pour une même analyse on peut avoir du texte ou des chiffres.

Globalement l'idée serait de lister les n° d'échantillons qui deviendraient les n° de lignes ; de même les analyses seraient listée est deviendraient les en têtes de colonnes. Après il faudrait faire la correspondance.

Le problème c'est que je sais pas comment démarrer et quelles fonctions utiliser.

Avez vous déjà vu ce genre de macros ou de tutoriels ?

Merci d'avance,

A votre dispo pour plus de détails

oto
A voir également:

6 réponses

Utilisateur anonyme
8 août 2016 à 18:50
Bonjour Buck35131,

Voici ton Fichier Excel 2007 : il te suffit de lancer la macro Essai (^e)
pour remplir ton tableau de droite. Dis-moi ce que tu en penses, et si
tu as besoin de plus d'infos.

Si tu n'arrives pas à ouvrir mon fichier Excel 2007 (*.xlsm), dis-le moi
et je t'enverrai le même converti au format "Excel 97 -2003" (*.xls).

Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».

Cordialement.  😊
 
0
Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
9 août 2016 à 15:29
Bonjour Albkan
Merci pour ton msg ; par contre je préfère format excel 97-2003.
Merci d'avance,
Olivier
0
Utilisateur anonyme > Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
Modifié par albkan le 9/08/2016 à 15:53
Bonjour Olivier,

Voici le Fichier Excel 2003 ; ^e lance la macro Essai et remplit le tableau de droite.
Dis-moi ce que tu en penses ; n'hésite pas à me demander plus d'infos si besoin.
Si ton problème est réglé, merci d'aller en haut de page pour cliquer sur le lien
« Marquer comme résolu ». Cordialement.  😊
0
Utilisateur anonyme > Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
9 août 2016 à 18:06
As-tu réussi à télécharger et ouvrir mon fichier Excel 2003 ? Si oui, ok ;
sinon, je peux te l'envoyer de nouveau via Cjoint. A+  😊
0
Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
10 août 2016 à 09:53
Salut
J'ai un blocage au niveau de mon boulot ; les fichiers avec macro passent pas.
Peux tu copier la mcro dans le coeur d'un message sur le forum ? J'aurais plus qu'a recopier ensuite. Merci
0
Utilisateur anonyme > Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
10 août 2016 à 12:24
Bonjour Buck35131,

Voici le code VBA à mettre dans Module1 :


Option Explicit

Sub Essai()
  Dim cellX As Range, dv As Byte, lig As Byte, col As Byte: Set cellX = [A2]
  Do While cellX.Offset(dv) <> ""
    lig = Right$(cellX.Offset(dv), 1) + 1  ' => lig 2 à  7 pour N1 à N6
    col = Asc(cellX.Offset(dv, 1)) - 90    ' => col 7 à 13 pour  a à  g
    Cells(lig, col) = cellX.Offset(dv, 2): dv = dv + 1
  Loop
End Sub


Et voici le Fichier Excel 2003 précédent (*.xls) sans Module1 ni macro ;
je te le transmet pour que tu aies la même 1ère feuille que celle que
j'ai utilisé pour cet exercice.

Pour le cas où ça passerait mieux : au format *.xlsx donc sans macros :
Fichier Excel 2007.

N'oublies pas de me dire ce que tu en penses, et de marquer le sujet
comme résolu si ça te convient (lien situé en haut de page).

Cordialement.  😊
 
0
Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
11 août 2016 à 14:27
Salut,
Ci-joint des images.
J'ai vérifié les points que tu évoques ; à priori c'est bon.
L'idée est de bien comprendre comment cela marche car il est possible que je réutilise cette macro dans d'autres contextes ; il faut que je comprenne bien comment cela marche.
Mais comme je butte déjà sur le lancement.
Idéalement la copie du tableau doit se faire sur une nouvelle feuille.
Merci pour ton avis
0
 
Bonjour Buck,

J'ai bien vu tous tes messages #11 à #14.

Le code VBA que je t'ai fourni marche très bien pour les renseignements de ton
message initial : une seule feuille, les libellés « N1 » à « N6 » et « a » à « g ».

Il ne peut absolument pas fonctionner selon tes nouvelles indications !

Je veux bien refaire ton exercice avec tes nouvelles infos, mais si tu m'indiques
clairement :

1) Pour ton tableau du message #13 :
a) Il est actuellement sur Feuil1 ; veux-tu un autre nom plus explicite ?
b) Coordonnées du tableau : si le coin supérieur gauche est en A1 :
    colonnes A à D ; lignes 1 à 12

2) Pour ton tableau du message #11 :
a) Le veux-tu en Feuil2 ? Ou autre nom plus explicite ?
b) Coordonnées du tableau : si le coin supérieur gauche est en A1 :
    colonnes A à K ; lignes 1 à 6

Mieux : mets des copies d'écran avec titres de lignes et colonnes (les en-têtes).

À te lire, cordialement.  😊
 
0
Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
11 août 2016 à 14:28
Image 2
0
Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
Modifié par Buck35131 le 11/08/2016 à 14:31
Image 1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Buck35131 Messages postés 9 Date d'inscription lundi 8 août 2016 Statut Membre Dernière intervention 11 août 2016
11 août 2016 à 14:34
Image 2
0
Utilisateur anonyme
11 août 2016 à 17:12
 
Lis d'abord mon message #15, puis celui-ci.

1) Anomalie : côté gauche, en haut, tu as 2 lignes pour le même projet :
    VBAProject (Export Labo... ; normalement : 1 seule ligne ; ça m'arrive
    aussi, parfois ; solution : enregistrer le classeur ; fermer Excel, puis le
    relancer ; vérifier si ça ne le refait plus ; si oui, à refaire : c'est parfois
    bien « capricieux » !

2) Tu as mis le code VBA dans Feuil1 au lieu de Module1 ! Voici comment
    ajouter un nouveau module : fais un clic droit sur ta ligne VBAProject et
    choisis : Insertion / Module (et pas Module de classe !) ; côté droit, tu as
    une page blanche où tu dois copier / coller mon code ; côté gauche, tu
    peux voir le nom du module : Module1 ; n'oublie pas de supprimer le
    code que tu as mis dans Feuil1 !

3) Je te rappelle que mon code VBA ne peut pas marcher avec tes nouvelles
    données ! Mais il marchera tout de suite avec la Feuil1 des classeurs Excel
    que je t'ai fourni via cjoint (*.xls et *.xlsx) de mon message #6.

À te lire.  😊
 
0
Utilisateur anonyme
12 août 2016 à 01:28
Bonjour Buck,

Laisse tomber mes messages précédents, car même si tu ne m'as pas
donné toutes les informations nécessaires, j'ai refait ton exercice avec
tes dernières infos ; voici donc le nouveau code VBA à copier / coller
dans Module1 (mon message #16 explique comment faire) :


Option Explicit


Sub Essai()
  If ActiveSheet.Name <> "Feuil2" Then Exit Sub
  Dim Analyses, OldEch As String * 8, cellX As Range, ligN As Long, ligR As Long
  Dim NbAly As Integer, Aly As String, colR As Integer, flag As Byte, cf As Integer
  Analyses = Array("HUMIDITÉ", "CENDRES BRUTES", "CALCIUM", _
    "HUMIDITÉ ET MAT. VOLATILES", "CELLULOSE BRUTE", "PROTÉINES BRUTES", _
    "MATIÈRES GRASSES BRUTES (B)", "ACIDITÉ OLÉIQUE", "IMPURETÉS INSOLUBLES")
  NbAly = UBound(Analyses): ligN = 3: ligR = 3: Application.ScreenUpdating = False
  Do
    Set cellX = Worksheets("Feuil1").Cells(ligN, 2): If IsEmpty(cellX) Then Exit Do
    If cellX <> OldEch Then ligR = ligR + 1
    With cellX
      Aly = cellX.Offset(, 1): flag = 0
      For colR = 0 To NbAly
        If Aly = Analyses(colR) Then flag = 1: Exit For
      Next colR
      If flag = 1 Then
        ' couleur de fond de la cellule du N° Échantillon
        cf = .Interior.ColorIndex
        ' N° Échantillon
        Cells(ligR, 2) = .Value: Cells(ligR, 2).Interior.ColorIndex = cf: colR = colR + 4
        ' Unité ; mais uniquement si non déjà fait
        If IsEmpty(Cells(3, colR)) Then
          Cells(3, colR) = .Offset(, 3): Cells(3, colR).Interior.ColorIndex = cf
        End If
        ' Valeur
        Cells(ligR, colR) = .Offset(, 2): Cells(ligR, colR).Interior.ColorIndex = cf
        OldEch = .Value
      End If
      ligN = ligN + 1
    End With
  Loop
End Sub


Fichiers Excel 2007 sans macro
Fichiers Excel 2003 sans macro

Mode d'emploi (après copie du code VBA dans Module1) :

Sur Feuil1, tu peux voir le 1er tableau des échantillons ; la macro
Essai ne s'exécutera pas dessus, mais c'est normal, car tu dois
être sur Feuil2 pour l'exécuter.

Sur Feuil2, note bien, d'abord, que le tableau est quasiment vide ;
le code VBA est fait uniquement pour les colonnes d'analyse déjà
présentes (donc 9 en tout) ; s'il en faut plus je te dirai quoi faire.

Exécutes la macro Essai pour le remplir, puis étudie le code VBA.

--------------------------------------

Dis-moi ce que tu en penses, et si ça te convient.

Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».

Cordialement.  😊
 
0