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
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
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
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
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
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