VBA Dupliquer ligne si condition + suppression déplacement
Fermévia55 Messages postés 14488 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 23 octobre 2024 - 7 nov. 2022 à 13:02
- VBA Dupliquer ligne si condition + suppression déplacement
- Dupliquer ecran - Guide
- Excel cellule couleur si condition texte - Guide
- Forcer suppression fichier - Guide
- Aller à la ligne excel - Guide
- Historique déplacement google - Guide
11 réponses
18 oct. 2022 à 11:29
Bonjour Christelle
Un exemple à adapter :
https://www.cjoint.com/c/LJsjCBEOKTK
Cdlmnt
Via
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 ?
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
18 oct. 2022 à 17:25
Postes ton fichier avec sa macro qu'on puisse voir ce qui provoque l'erreur
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 18 oct. 2022 à 18:34
Non tout est correct
Bonne suite
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.
20 oct. 2022 à 13:33
Bonjour il faut le faire dans une nouvelle macro
https://www.cjoint.com/c/LJulGLokMyK
Cdlmnt
Via
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.
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
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
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?
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