HELP - MACRO EXCEL - REORGANISATION DONNEES

Buck35131 Messages postés 9 Statut Membre -  
 Utilisateur anonyme -
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

6 réponses

  1. Utilisateur anonyme
     
    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
    1. Buck35131 Messages postés 9 Statut Membre
       
      Bonjour Albkan
      Merci pour ton msg ; par contre je préfère format excel 97-2003.
      Merci d'avance,
      Olivier
      0
    2. Utilisateur anonyme > Buck35131 Messages postés 9 Statut Membre
       
      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
    3. Utilisateur anonyme > Buck35131 Messages postés 9 Statut Membre
       
      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
    4. Buck35131 Messages postés 9 Statut Membre
       
      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
    5. Utilisateur anonyme > Buck35131 Messages postés 9 Statut Membre
       
      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
  2. Buck35131 Messages postés 9 Statut Membre
     
    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
    1. Utilisateur anonyme
       
       
      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
  3. Buck35131 Messages postés 9 Statut Membre
     
    Image 2
    0
  4. Buck35131 Messages postés 9 Statut Membre
     
    Image 1
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Buck35131 Messages postés 9 Statut Membre
     
    Image 2
    0
    1. Utilisateur anonyme
       
       
      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
  7. Utilisateur anonyme
     
    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