Comment transformer données avec une macro

Bonjour

Je suis devant un problème qui me dépasse au vu des connaissances en EXCEL acquises. Après quelques essais difficiles en utilisant les fonctions "recherchev et convertir c'est la galère.

Les données de départ doivent subir des transformations pour arriver au Résultat 2.

J'ai suivi cette méthode :

  • les données de départ sont transcrites sans point virgules et espaces (fonction "SUBSTITUE)
  • de ces nouvelles données, utilisation de la fonction "CONVERTIR" pour avoir une lettre par colonne puis transformation dans un autre codage a l'aide de la table de conversion AVEC LA FONCTION "RECHERCHEV".

Ne connaissant rien en macro, pouvez vous m'aider, svp à convertir cette méthode en macro ?

Merci

Cdlt

23essais.xlsx (24.34 Ko)

Bonjour,

Pourquoi en ligne 1 et ligne 7 y a-t-il un ajout arbitraire : NH (conservé en outre en groupe malgré ta description) et 3 ?

Bonjour,

une proposition de macro

sélectionner la feuille départ avant de lancer la macro

Sub aargh()
    Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=True, Other:=False
   i = 1
   While Cells(i, 1) <> ""
   j = 1
   While Cells(i, j) <> ""
   Set re = Sheets("table conversion").Range("A:A").Find(Cells(i, j).Value)
   If Not re Is Nothing Then
   Cells(i, j) = re.Offset(, 1)
   End If
   j = j + 1
   Wend
   i = i + 1
   Wend
End Sub
MFerrand a écrit :

Bonjour,

Pourquoi en ligne 1 et ligne 7 y a-t-il un ajout arbitraire : NH (conservé en outre en groupe malgré ta description) et 3 ?

Une erreur

Cdlt


Bonjour

Pouvez vous me faire l'extraction de départ vers Résultat 1

Merci

Cdlt

Bonjour,

voilà

Sub aargh()
    With Sheets("résultat 1")
        Sheets("départ").Range("A:A").Copy .Range("A1")
        .Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
                                      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
                                      Semicolon:=False, Comma:=True, Space:=True, Other:=False
        i = 1
        While .Cells(i, 1) <> ""
            j = 1
            While .Cells(i, j) <> ""
                Set re = Sheets("table conversion").Range("A:A").Find(.Cells(i, j).Value)
                If Not re Is Nothing Then
                    .Cells(i, j) = re.Offset(, 1)
                End If
                j = j + 1
            Wend
            i = i + 1
        Wend
    End With
End Sub
h2so4 a écrit :

Bonjour,

une proposition de macro

sélectionner la feuille départ avant de lancer la macro

Sub aargh()
    Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=True, Other:=False
   i = 1
   While Cells(i, 1) <> ""
   j = 1
   While Cells(i, j) <> ""
   Set re = Sheets("table conversion").Range("A:A").Find(Cells(i, j).Value)
   If Not re Is Nothing Then
   Cells(i, j) = re.Offset(, 1)
   End If
   j = j + 1
   Wend
   i = i + 1
   Wend
End Sub

Bonjour

Dans mes données de départ, j'ai fait deux bourdes :

  • pour faire la comparaison du résultat, je n'ai plus les données de départ en visu. Y a t il moyen de laisser les données de départ et de coller la transformation à partir de la colonne suivante.
  • Dans la colonne de données de départ j'ai quelques cellules vides entre les données, ce qui fait que la macro dès qu"elle rencontre une de ce type ne transforme plus rien

Pouvez-vous m'aider, svp ?

rebonjour,

revoilà,

Sub aargh()
    With Sheets("résultat 1")
        Sheets("départ").Range("A:A").Copy .Range("A1")
        .Columns("A:A").TextToColumns Destination:=.Range("B1"), DataType:=xlDelimited, _
                                      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
                                      Semicolon:=False, Comma:=True, Space:=True, Other:=False
        i = 1
        While .Cells(i, 1) <> ""
            dc = Cells(i, Columns.Count).End(xlToLeft).Column
            For j = 2 To dc
                Set re = Sheets("table conversion").Range("A:A").Find(.Cells(i, j).Value)
                If Not re Is Nothing Then
                    .Cells(i, j) = re.Offset(, 1)
                End If
            Next j
            i = i + 1
        Wend
    End With
End Sub

j'annule le dernier envoi d'Aujourd’hui, 14:37 qui ne reprend pas tous les problèmes :

Un petit bilan me semble plus judicieux : (tous les erreurs dans le résultat de la macro viennent d'un manque de données de ma part).

Les essais de la 1er macro relèvent :

Pour les cas suivants :

1) Dans un groupe de lettres si la/les lettres du milieu ne sont pas déclarée, il y a cellule vide entre ces deux lettres.

Modif : Y-a-t-il moyen de modifier cet écriture pour que les lettres se suivent (surpression de la cellule vide).

2) le signe * reprend n’importe quels valeurs. Erreur ?

3) Quand une cellule vide s'interpose dans la liste de données, la macro retranscrit les lettres.

Modif : Y-a-t-il moyen de modifier cet écriture que la macro continue son travail même si elle rencontre ce problème.

4) pouvez faire partir la macro de la 2ème ligne pour que je puisse mettre un bouton pour commander la macro

Merci

Cdlt

24essais-2.xlsm (58.51 Ko)

bonjour,

version adaptée

Sub aargh()
    With Sheets("résultat 1")
    .Cells.ClearContents
        dl = Sheets("table conversion").Cells(Rows.Count, 1).End(xlUp).Row
        For Each c In Sheets("table conversion").Range("A1:A" & dl)
            If c = "*" Then c.Value = "blabla": Exit For
        Next
        dl = Sheets("départ").Cells(Rows.Count, 1).End(xlUp).Row
        Sheets("départ").Range("A1:A" & dl).Copy .Range("A2")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 1 To dl
            If InStr(.Cells(i, 1), "*") <> 0 Then
                .Cells(i, 1) = Replace(.Cells(i, 1), "*", "blabla")
            End If
        Next i
        .Columns("A:A").TextToColumns Destination:=.Range("B1"), DataType:=xlDelimited, _
                                      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
                                      Semicolon:=False, Comma:=True, Space:=True, Other:=False
        For i = 2 To dl
            dc = Cells(i, Columns.Count).End(xlToLeft).Column
            k = 1
            For j = 2 To dc
                Set re = Sheets("table conversion").Range("A:A").Find(.Cells(i, j).Value)
                If Not re Is Nothing Then
                    If re.Offset(, 1) <> "" Then
                        k = k + 1
                        .Cells(i, j) = ""
                        .Cells(i, k) = re.Offset(, 1)
                        Else
                        .Cells(i, j) = ""
                        End If
                End If
            Next j
        Next i
    End With
    Sheets("table conversion").Range("A:A").Replace "blabla", "*"
    Sheets("résultat 1").Range("A:A").Replace "blabla", "*"
End Sub

bONJOUR

Si j'ai bien compris ta macro :

1 - je suis sur la feuille départ puis j'exécute la macro : le résultat se trouve en Résultat 1 qui se traduit par une décomposition de la ou du groupe de lettre. Là tout va bien

2- je suis sur la feuille résultat 1 et j'exécute une nouvelle fois la transformation des lettres. Là par contre, j'ai un problème, c'est que le B n'est pas traduit par AS565SA.

Nota : aurais tu un moyen de connaître le nombre de lettres d'un groupe de la colonne A pour que je puisse vérifier rapidement si la décomposition c'est bien faite.

Merci

Cdlt

re-bonjour,

correction

ps : la version est adaptée pour partir de "départ" et donner le résultat en "résultat 1", quelle que soit la feuille sélectionnée.

Sub aargh()
    With Sheets("résultat 1")
    .Cells.ClearContents
        dl = Sheets("table conversion").Cells(Rows.Count, 1).End(xlUp).Row
        For Each c In Sheets("table conversion").Range("A1:A" & dl)
            If c = "*" Then c.Value = "blabla": Exit For
        Next
        dl = Sheets("départ").Cells(Rows.Count, 1).End(xlUp).Row
        Sheets("départ").Range("A1:A" & dl).Copy .Range("A2")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 1 To dl
            If InStr(.Cells(i, 1), "*") <> 0 Then
                .Cells(i, 1) = Replace(.Cells(i, 1), "*", "blabla")
            End If
        Next i
        .Columns("A:A").TextToColumns Destination:=.Range("B1"), DataType:=xlDelimited, _
                                      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
                                      Semicolon:=False, Comma:=True, Space:=True, Other:=False
        For i = 2 To dl
            dc = Cells(i, Columns.Count).End(xlToLeft).Column
            k = 1
            For j = 2 To dc
                Set re = Sheets("table conversion").Range("A:A").Find(.Cells(i, j).Value, lookat:=xlWhole)
                If Not re Is Nothing Then
                    If re.Offset(, 1) <> "" Then
                        k = k + 1
                        .Cells(i, j) = ""
                        .Cells(i, k) = re.Offset(, 1)
                        Else
                        .Cells(i, j) = ""
                        End If
                End If
            Next j
        Next i
    End With
    Sheets("table conversion").Range("A:A").Replace "blabla", "*"
    Sheets("résultat 1").Range("A:A").Replace "blabla", "*"
End Sub

Re

je ne n'y comprends plus rien avec le résultat car je pense qu'il n'est pas stable quand je refias une nouvelle fois la manip.

Je viens d'exécuter la macro et j'ai eu un message avec une question a valider avec oui ou non.

1- Est ce qu'à chaque fois que je refais la manip le message doit s'afficher, car avec mais essais non ?

2 - est ce que la macro efface le résultat 1 à chaque début car parfois je pense avoir des erreurs

3- avec la lettre

- * le résultat je retrouve l' * par contre quand l'écriture de départ est *, M le résultat finale : en cellule de la colonne A : blabla, M et en cellule de la colonne B ATL2X2X. Je pensais que je devrais trouver non pas colonne A : blabla, M mais *, M

4 - Pouvez vous vérifier le fichier joint, pour voir si je n'ai pas fait des erreurs de recopie . Ajouter un bouton (de contrôle formulaire) pour éviter de passer par développeur puis macro puis exécuter, svp, car là je suis pommer ?

Merci

Cdlt

10essais-2-3.xlsm (72.21 Ko)
jag83 a écrit :

Re

je ne n'y comprends plus rien avec le résultat car je pense qu'il n'est pas stable quand je refais une nouvelle fois la manip.

Je viens d'exécuter la macro et j'ai eu un message avec une question à valider avec oui ou non.

1- Est ce qu'à chaque fois que je refais la manip le message doit s'afficher, car avec mes essais non ?

non

2 - est ce que la macro efface le résultat 1 à chaque début car parfois je pense avoir des erreurs

oui

3- avec la lettre

- * le résultat je retrouve l' * par contre quand l'écriture de départ est *, M le résultat final : en cellule de la colonne A : blabla, M et en cellule de la colonne B ATL2X2X. Je pensais que je devrais trouver non pas colonne A : blabla, M mais *, M

4 - Pouvez vous vérifier le fichier joint, pour voir si je n'ai pas fait des erreurs de recopie . Ajouter un bouton (de contrôle formulaire) pour éviter de passer par développeur puis macro puis exécuter, svp, car là je suis paumé ?

corrigé et bouton inséré dans l'onglet table conversion

Merci

Cdlt

12essais-2-3.xlsm (71.68 Ko)

Bonjour

Je viens d'ouvrir le fichier et j'ai fait 2 tests en partant du fichier fourni de votre réponse :

1 - J'ai supprimer toutes les données après la ligne 172 puis j'ai lancé la macro.

Résultat :

j'ai une partie avec des lettres et l'autre avec la conversion ? en actionnant le bouton lancer deux fois

2 - j'ai remplacé l'ensemble des données de départ en colonne A

Résultat : je n'ai que le découpage avec pour les * blabla

- quand je lance la macro avec le bouton lancer le résultat est comme en 1

- quand je lance la macro une 2ème fois rien ne change

3 - Curiosité : quand voit apparaître le message alors ?

4 - Est ce que 2007 peut engendrer des problèmes ?

5 - quand je passe par le bouton macro dans la fenêtre Macros dans :

il y a 3 possibillités : Tous les classeurs ouverts, Ce classeur, Essais 2-3 xlm.

Est ce que si un fichier est un autre ouvert, cela peut perturber la macro.

Merci

Cdlt

Bonjour,

nouvelle version

13essais-2-3.xlsm (72.08 Ko)

Re

Je pense que le bout du tunnel est atteint. Je continue à faire des tests encore mais pour moi la solution est trouvée

Mille merci

Claude

Cdlt

Bonjour

merci pour votre aide très précieuse, vous m'avez fait gagner beaucoup de temps.

Encore mille merci

A+

Cdlt

Rechercher des sujets similaires à "comment transformer donnees macro"