Décalage de lignes

Bonjour à tous,

Afin d’utiliser un fichier .dat avec un logiciel j’ai besoin de le mettre en forme correctement auparavant.
De ce fait, j’ai créé une feuille excel avec les informations qui m’intéressent sous forme de tableau. Cependant, j’aimerai décaler certaine partie de ligne du tableau.
Je m’explique :
Voici mon tableau par exemple:
A B C D E F G H I J K L M N O
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Et j’aimerai obtenir ça:
A B C D E F G H
I J K L M N O
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15

Evidemment le nombre de ligne peut varier

N’hésitez pas à demander plus de précisions. C’est assez délicat à expliquer comme besoin.

En vous remerciant par avance

Cordialement
Isa

exemple simple pour manip.xlsm (13,3 Ko)

Bonjour,
Pour une meilleure explication, place dans un autre onglet ce que voudrais depuis la feuil1

Bonjour,

Voici le fichier avec l’explication en feuille 2.
Sachant que par la suite, j’aimerai pouvoir exporter le fichier en csv ou txt et que cela garde la même mise en page.

En vous remerciant par avance

Cordialement
Isa
exemple simple pour manip.xlsm (14,5 Ko)

Re,
A tester, le résultat sera en « Feuil2 »
Pour l’export, il vaut mieux garder le format CSV
exemple simple pour manip.xlsm (17,8 Ko)

Super merci beaucoup c’est exactement ce que je voulais et facilement adaptable à mon fichier d’origine merci

Bonne journée

Rebonjour,

J’ai utilisé votre code et j’ai réussi à l’appliquer sur mon cas. Cependant, il y a un « bug ».
En effet, j’ai insérer des ligne au-dessus de mon tableau et pour effectuer le décalage cela se passe très bien sauf pour la ligne des titres des colonnes. La première case est copiée mais pas les autres. J’ai l’impression que le code considère mes titres comme des cellules vides car sinon ça se passe très bien.

Pouvez-vous décrire votre code vba afin que je vois quels paramètres à modifier ?

En vous remerciant par avance
Cordialement
Isa

Re,
Voici la macro, il faut modifier les instructions en informations (ex: pour le départ en ligne 7)

Sub Test()
  Dim i%, j%, Dl%, Dc%, Lig%, Col%
  Dim Ws As Worksheet, Wd As Worksheet
  Set Ws = Sheets("Feuil1")
  Set Wd = Sheets("Feuil2")
  Wd.Activate
  Wd.Range(Wd.Range("A1"), ActiveCell.SpecialCells(xlLastCell)).Select
  Selection.ClearContents
  Wd.Range("A1").Select
  Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row
  '***************************************************************
  ' A modifier par rapport à la première ligne à prendre en compte
  Dc = Ws.Cells(7, Columns.Count).End(xlToLeft).Column 'Cells(7,
  j = 1: Lig = 7: i = 1 'Lig = 7
  For Lig = 7 To Dl 'Lig = 7
  '***************************************************************
    For Col = 1 To Dc
      Wd.Cells(j, i) = Ws.Cells(Lig, Col)
      i = i + 1
      If Col = 7 Then i = 2: j = j + 1
      If Ws.Cells(Lig, Col) = "" Then Exit For
    Next Col
    j = j + 1: i = 1
    Dc = Ws.Cells(Lig, Columns.Count).End(xlToLeft).Column
  Next Lig
End Sub

exemple simple pour manip.xlsm (17,4 Ko)

Oui ça j’ai compris et ça marche pour tout mais quand je veux copier tout mon doc la ligne où il y a les titres ne veut pas subir la même transformation que ses congénères alors que ç se passe correctement pour les autres. C’est pour cela que je pensais que le texte était considéré par le vba comme = " " et il sort de la boucle.

Re,
Je ne comprends pas la demande, place un exemple

Si vous lancez la macro sur ce fichier vous aller voir que la ligne 4 ne fait pas la boucle
exemple simple pour manip.xlsm (15,6 Ko)

Re
A tester

Sub MEP_avExport()
  
  Sheets.Add.Name = "DatOK"
  Dim i%, j%, Dl%, Dc%, Lig%, Col%
  Dim Ws As Worksheet, Wd As Worksheet
  Set Ws = Sheets("Feuil1")
  Set Wd = Sheets("DatOK")
  Wd.Activate
  Wd.Range(Wd.Range("A1"), ActiveCell.SpecialCells(xlLastCell)).Select
  Selection.ClearContents
  Wd.Range("A1").Select
  Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row
  Dc = Ws.Cells(4, Columns.Count).End(xlToLeft).Column
  Ws.Range("A1:A3").Copy Wd.Cells(1, 1)
  j = 4: Lig = 4: i = 1
  For Lig = 4 To Dl
    For Col = 1 To Dc
      Wd.Cells(j, i) = Ws.Cells(Lig, Col)
      i = i + 1
      If Col = 7 Then i = 2: j = j + 1
      If Ws.Cells(Lig, Col) = "" Then Exit For
    Next Col
    j = j + 1: i = 1
    Dc = Ws.Cells(Lig, Columns.Count).End(xlToLeft).Column
  Next Lig
  

Range("A5").Select
ActiveCell.FormulaR1C1 = "! "

End Sub

Super merci beaucoup

Autre question cette feuille je souhaite l’exporter sur un fichier .txt
Or dans la colonne B le texte peut être plus long que la normal. De ce fait, en .txt ça décale tout.
Est-ce que vous savez comment attribuer une certaine taille à une colonne ou l’adapter à la cellule la plus longue. Je vous joins le code me permettant d’extraire mon fichier.
Sub Generer_Fichier_Texte_PRINT1a()
’ Création d’un fichier texte avec la commande PRINT
’ et saut de ligne dans le fichier texte

Dim i As Long, j As Long, ar
Dim sRepertoire As String, sNomFichier As String
Dim iFile As Integer
Dim str As String

sRepertoire = « C:\IDC » '// doit terminer avec un «  »
sNomFichier = « OutputPrint1a.txt » '// nom du fichier

On Error Resume Next
Kill sRepertoire & sNomFichier '// effacer le fichier existant
iFile = FreeFile
Open sRepertoire & sNomFichier For Output As #iFile '// crée le fichier texte
ar = Sheets(« DatOK »).Cells(1).CurrentRegion.Value '// valeurs dans un array (plus rapide)
For i = 1 To UBound(ar, 1) '// boucle sur les lignes
str = «  »
For j = 1 To UBound(ar, 2) '// boucle sur les colonnes
str = str & ar(i, j) & vbTab '// valeurs séparées par tabulations
Next j
Print #iFile, str '// écrire dans le fichier
Next i
Close #iFile '// Fermer le fichier
On Error GoTo 0
End Sub

Re,
Ce ne sera guère possible en TXT, à moins de rentrer dans un bazard infernale, faut choisir en CSV pour garder le format

Bonjour,

Je me permets de vous solliciter de nouveau car vous avez été d’une grande aide sur ce sujet de décalage de lignes.
Aujourd’hui, j’aimerai faire le contraire de la fonction que vous avez créer pour répondre à mon soucis. En effet, j’aimerai pouvoir remettre en l’état les lignes que j’ai décalé.

Pouvez-vous m’aider?

En vous remerciant par avance

Cordialement
Isa

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.