VBA Dupliquer ligne si condition + suppression déplacement

Fermé
ChristelleMaug Messages postés 11 Date d'inscription jeudi 6 octobre 2022 Statut Membre Dernière intervention 10 novembre 2023 - 18 oct. 2022 à 10:42
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 - 7 nov. 2022 à 13:02

Bonjour,

Je débute dans les macros VBA, je n'arrive pas à trouver le code permettant de faire la manipulation souhaité.

J'ai une base de données ("data_A") avec un nombre de ligne non déterminé (peut augmenter ou diminuer)

Dans cette base de donnée, on retrouve dans la colonne D des caractères où celui-ci font doivent faire 10 caractères ou 11 (si le premier caractère est un chiffre)

Quelques cellules sont supérieurs à 10 ou 11 caractères.

Mon objectif est d'insérer une ligne en dessous de chaque ligne où la colonne D contient plus de 10 ou 11 caractères

Y recopier les colonnes A,B,C, E,F,G et H  et insérer les caractères supérieur à 10 ou 11 dans la nouvelle ligne et supprimer tous les caractères supérieur à 10 ou 11 de la ligne d'origine

Exemple grossier (fait à la mano):

En haut, un exemple du tableau que j'ai actuellement et en bas, ce que j'aimerais avoir avec une macro.

A savoir que la colonne D peut avoir jusqu'à 140 caractères, donc l'ajout de 14 lignes d'affilé avec le même principe.

Avez-vous une idée de comment m'y prendre ?

En vous remerciant par avance,


Windows / Firefox 91.0

A voir également:

11 réponses

via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 729
18 oct. 2022 à 11:29

Bonjour Christelle

Un exemple à adapter :

https://www.cjoint.com/c/LJsjCBEOKTK

Cdlmnt

Via


0
ChristelleMaug Messages postés 11 Date d'inscription jeudi 6 octobre 2022 Statut Membre Dernière intervention 10 novembre 2023
18 oct. 2022 à 13:30

Merci pour ce retour super rapide !

J'ai retranscris selon mon besoin.

Après plusieurs essais, j'ai l'erreur 91 qui apparait , soit Variable d'objet non défini mais je ne vois pas où est le soucis dans le code... sur la 1ère ligne

Cela arrive lorsque je double la ligne : Sheets("Feuil2").Range("A" & x) = Sheets("Feuil1").Range("A" & n)

J'ai plusieurs colonne a recopier.

Par contre, cela fonctionne lorsque je fais uniquement le remplacement sur la colonne D et la colonne B par exemple

Faut-il créer un "autre n" pour recopier les autres colonnes ?

0
yg_be Messages postés 23204 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 septembre 2024 1 537
18 oct. 2022 à 15:31

bonjour,

l'erreur se produit sur cette ligne de code?  Peut-être montrer le code complet, en tenant compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

0
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 729
18 oct. 2022 à 17:25

Postes ton fichier avec sa macro qu'on puisse voir ce qui provoque l'erreur


0
ChristelleMaug Messages postés 11 Date d'inscription jeudi 6 octobre 2022 Statut Membre Dernière intervention 10 novembre 2023
18 oct. 2022 à 17:39

J'ai tout fermé et recommencé au calme et maintenant cela fonctionne... Je ne sais pas ce qu'il s'est passé.

J'ai refait des essais, la macro fonctionne et le problème n'est pas ré-apparu.

Dites-moi s'il y a une erreur quand même, sait-on jamais !

merci à vous !

For n = 1 To Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
lon = Len(Sheets("dataA").Range("D" & n))
texte = Sheets("dataA").Range("D" & n)
nf = lon / 10
For t = 1 To nf
nbc = 10
If Val(Left(Sheets("dataA").Range("D" & n), 1)) > 0 And t = 9 Then nbc = 11
a = Left(texte, nbc)
texte = Right(texte, Len(texte) - nbc)
x = x + 1
Sheets("dataB").Range("A" & x) = Sheets("dataA").Range("A" & n)
Sheets("dataB").Range("B" & x) = Sheets("dataA").Range("B" & n)
Sheets("dataB").Range("C" & x) = Sheets("dataA").Range("C" & n)
Sheets("dataB").Range("D" & x) = a

Next t
Next n
0

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

Posez votre question
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 729
Modifié le 18 oct. 2022 à 18:34

Non tout est correct

Bonne suite


0
ChristelleMaug Messages postés 11 Date d'inscription jeudi 6 octobre 2022 Statut Membre Dernière intervention 10 novembre 2023
20 oct. 2022 à 12:04

Bonjour,

Je me retrouve à devoir dupliquer également sur la colonne C où si on retrouve un "+" dans la cellule il faut ajouter une ligne. il peut y avoir plusieurs + dans la même cellule.

Exemple :

Ligne 1 : A+B+C

Résultat souhaité

Ligne 1 : A
Ligne 2 : B
Ligne 3 : C

J'aimerais l'ajouter au code actuel cité plus haut.

Merci pour votre aide.

0
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 729
20 oct. 2022 à 13:33

Bonjour il faut le faire dans une nouvelle macro

https://www.cjoint.com/c/LJulGLokMyK

Cdlmnt

Via


0
ChristelleMaug Messages postés 11 Date d'inscription jeudi 6 octobre 2022 Statut Membre Dernière intervention 10 novembre 2023
20 oct. 2022 à 15:47

Bonjour,

Merci pour la partie du code ! Celui-ci ne recopie pas le reste de la ligne d'où le faite que je souhaitais l'ajouter au code précédent.

Je n'arrive pas très bien à comprendre comment le code fonctionne d'ailleurs pour essayer de l'adapter au précédent ou de refaire la même action de duplication sur les nouvelles lignes.

0
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 729
20 oct. 2022 à 18:49

Je te remets ici le code avec des commentaires

Sub decomposer()
'Boucle sur les lignes remplies de la feuille
For n = 1 To Columns(3).Find("*", , , , xlByColumns, xlPrevious).Row + 1000
'Compte le nombre de + (on fait la différence entre la longueur de la chaîne complète et la longueur de la chaîne dont on remplace le s+ par du vie)
a = Len(Range("C" & n)) - Len(WorksheetFunction.Substitute(Range("C" & n), "+", ""))
'si a est un nombre positif
    If a > 0 Then
    ' boucle le nombre de fois qu'il y a de +
    For t = 1 To a
    'sélectionne la ligne en dessous
    Range("C" & n + 1).Select
    'insere une ligne
    Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
    Next
    ' découpe la chaîne de caractères en fonction des + et place les items dans un tableau
        tablo = Split(Range("C" & n), "+")
        'boucle sur les items découpés
        For g = 0 To UBound(tablo)
        'inscrit l'item dans la bonne cellule
        Range("C" & n + g) = tablo(g)
        Next
    
    End If
Next
End Sub

0
ChristelleMaug Messages postés 11 Date d'inscription jeudi 6 octobre 2022 Statut Membre Dernière intervention 10 novembre 2023
7 nov. 2022 à 09:55

Bonjour,

Merci pour ces explications.

J'ai essayé de réaliser ce code, celui-ci rajoute bien une ligne avec la valeur séparant + mais ne reporte pas le reste des données des autres colonnes de la ligne au-dessus de celle-ci.

Quelle est mon erreur ?

Sheets("dataA").Select
For n = 1 To Columns(8).Find("*", , , , xlByColumns, xlPrevious).Row + 1000
a = Len(Sheets("dataA").Range("G" & n)) - Len(WorksheetFunction.Substitute(Range("G" & n), "+", ""))
    If a > 0 Then
    For t = 1 To a
    Range("G" & n + 1).Select
    Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
    Next
        tablo = Split(Range("G" & n), "+")
        For g = 0 To UBound(tablo)
        Range("G" & n + g) = tablo(g)
        x = x + 1
        Sheets("dataB").Range("A" & x) = Sheets("dataA").Range("A" & n)
        Sheets("dataB").Range("B" & x) = Sheets("dataA").Range("B" & n)
        Sheets("dataB").Range("C" & x) = Sheets("dataA").Range("C" & n)
        Sheets("dataB").Range("D" & x) = a
        Sheets("dataB").Range("E" & x) = Sheets("dataA").Range("E" & n)
        Sheets("dataB").Range("F" & x) = Sheets("dataA").Range("F" & n)
        Sheets("dataB").Range("G" & x) = Sheets("dataA").Range("G" & n)
        Sheets("dataB").Range("H" & x) = Sheets("dataA").Range("H" & n)
        Next
    End If
Next

End Sub
0
yg_be Messages postés 23204 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 septembre 2024 1 537
7 nov. 2022 à 11:54

L'indentation de ton code n'est pas conforme, cela n'aide pas à le comprendre.

Connais-tu la technique qui permet d'exécuter le code pas à pas, afin de suivre ce qu'il fait?

0
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 729
7 nov. 2022 à 13:02

Bonjour

Envoie moi le fichier dans lequel tu as inséré cette macro que je regarde et puisse faire des essais


0