[Déplacé VBA]Insertion lignes sous condition

Résolu
HRgeneva Messages postés 6 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012 - 4 janv. 2012 à 16:48
HRgeneva Messages postés 6 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012 - 5 janv. 2012 à 16:07
Bonjour,

Je suis débutant en VBA, ma question va donc surement vous paraître très simple mais je tourne en rond et j'ai besoin d'une réponse.

J'ai dans ma colonne A des numero de dossier avec à leur droite une série d'infos sur ces dossiers. Ces numéro de dossier sont espacé de façon non régulière en fonction de la quantité d'info. Je souhaiterai avoir un nombre de lignes égales entre chaque numéro de dossier, par exemple:

F12034 rouge
- carré
- lourd
-
F12035 bleu
- rond
-
F12036 vert
- triangle
- léger
- froid
-
F12037
.
.

Et avoir à la place:

F12034 rouge
- carré
- lourd
-
-
F12035 bleu
- rond
-
-
-
F12036 vert
- triangle
- léger
- froid
-
F12037
.
.
.

Je ne sais pas si j'ai été clair?

D'avance merci pour votre aide!
HR

13 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 janv. 2012 à 20:46
Bon ...

Après un bon repas et un bon vin et relecture de mon code , on peut faire mieux et moins cher (se passer de la booléenne deja et éviter une redondance) ===>>

Dim nblignes As Integer, arrivee As Long, i As Long, j As Integer
  nblignes = 10 ' <<<<<<<====== c'est ici, que tu dois définir le nombre de lignes d'écart que tu veux
  With Worksheets("Feuil1") ' <<<<<<==== remplace "Feuil1" par le nom de TA feuille à toi
    For i = .Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
     If .Range("A" & i).Text Like "F#### ##" Then
       If arrivee <> 0 Then
         For j = 1 To nblignes + 1 - (arrivee - i)
           .Range("A" & arrivee).Insert Shift:=xlShiftDown
         Next
       End If
       arrivee = i
     End If
    Next
  End With


Voilà

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 janv. 2012 à 16:53
Bonjour,
Avant toute autre chose :
Tu développes sous VBA et non sous VB6. Pense dorénavant à poster dans la section adéquate (langes dérivés > VBA)
Tes "numeros de dossier" ont-ils TOUJOURS le même aspect (la lettre F suivie de 5 chiffres, d'un espace, puis d'une couleur) ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 janv. 2012 à 16:59
Tien prends le code de "ucfoutu". Dans l'état actuelle il liste toutes les valeurs de la colonne A toi tu n'as que à changer le IF.

note Left(Feuil1.Range("A1").Value, 2) récupère les deux premiers caractère de la cellule.

Do While Not (IsEmpty(ActiveCell))
  If Left(Feuil1.Range("A1").Value, 2) 11 And Right(Feuil1.Range("A1").Value, 1) a Then
    nb = nb + 1
  End If
  Selection.Offset.cell(1, 0).Select
Loop 
0
HRgeneva Messages postés 6 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012
4 janv. 2012 à 17:02
Ok je ferai attention pour le sujet la prochaine fois ;)

Oui c'est à chaque fois sous forme de F#### ##
Par contre les infos sont des répartitions séctorielles, monétaires ou géographiques, il peut y avoir de 2 à 30 lignes de détails, par exemple, à côté de A1, on peut avoir de info de B1 à I3 puis à côté de A5 des infos de B5 à I29 etc...

Merci ;)
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 janv. 2012 à 17:07
déjà :
F#### ## signifie F suivi de 4 chiffres, d'un espace, puis de 2 chiffres (et donc très différent der ton 1er message) !
Qu'en est-il donc EXACTEMENT ?
Par contre les infos sont des répartitions séctorielles, monétaires ou géographiques, il peut y avoir de 2 à 30 lignes de détails, par exemple, à côté de A1, on peut avoir de info de B1 à I3 puis à côté de A5 des infos de B5 à I29 etc...

Très différent de ton 1er message également (où il était question d'avoir toujours 4 lignes entre les "dossiers".
Peux-tu exposer très clairement et avec précision ce que tu veux EXACTEMENT ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
HRgeneva Messages postés 6 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012
4 janv. 2012 à 17:25
Ok navré, je ne pensais pas que le type d'info était vraiment important.

Donc oui c'est toujours "F" suivit de 4 chiffres, un espace puis 2 chiffres sous forme F#### ##

En fait je vais simplifier ma demande:

Dans la colonne A, il y a ces numéros de dossiers espacés de façon irrégulière (par exemple en A1-A4-A9-A17-A22) et je voudrais insérer de façon automatique des lignes entres ces numéros de dossier pour avoir un espacement régulier (px A1-A10-A20-A30 etc...)

Merci!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 janv. 2012 à 17:30
Bon...

Cela va me demander de faire un petit travail préalable assez méticuleux, pour ne pas risquer d' "ajouter des ajouts aux ajouts".
Je te ferai ça ce soir, après dîner.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 janv. 2012 à 18:08
Bon...
J'avais un petit "trou" dont je te fais profiter :

Dim nblignes As Integer, arrivee As Long, i As Long, j As Integer, deja As Boolean
  nblignes = 10 ' <<<<<<<====== c'est ici, que tu dois définir le nombre de lignes d'écart que tu veux
  With Worksheets("Feuil1") ' <<<<<<==== remplace "Feuil1" par le nom de TA feuille à toi
    For i = .Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
     If .Range("A" & i).Text Like "F#### ##" Then
       If deja Then
         For j = 1 To nblignes + 1 - (arrivee - i)
           .Range("A" & arrivee).Insert Shift:=xlShiftDown
         Next
         arrivee = i
       Else
         arrivee = i
         deja = True
       End If
     End If
    Next
  End With


Valable, donc, si tes dossiers sont en colonne A et de la forme "F#### ##", hein !
De cette manière, même en lançant plusieurs fois par mégarde, tu auras toujours 10 lignes de "séparation"


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 janv. 2012 à 12:56
Tiens !
Plus là !
Je suis donc le seul, de nous deux, à me "fouler un peu la rate" ?

Bonne chance ...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
HRgeneva Messages postés 6 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012
5 janv. 2012 à 14:08
Merci beaucoup ucfoutu! Je n'avais pas eu le temps de voir cela avant mais je vais tester tout ça aujourdhui!

Merci pour ton temps
0
HRgeneva Messages postés 6 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012
5 janv. 2012 à 14:51
Le code fonctionne mais j'aurai une dernière demande: il faudrait que j'insère une ligne allant de la colonne A à K et pas seulement en A... Est-ce possible? Après je pourrai essayer de comprendre tranquilement le code.

Merci beaucoup!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 janv. 2012 à 16:02
Bonjour,
1) un problème par discussion, s'il te plait. C'est la règle sur ce forum.
Si celui-ci est résolu : ===>> Tag "réponse acceptée"
2) dans ta nouvelle discussion/nouveau problème :
j'aurai une dernière demande: il faudrait que j'insère une ligne allant de la colonne A à K et pas seulement en A

n'est pas vraiment clair et est à préciser correctement?.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
HRgeneva Messages postés 6 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012
5 janv. 2012 à 16:07
Ok je vais faire une nouvelle demande, merci pour ton aide!
0
Rejoignez-nous