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.
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.
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 ?
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
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.
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
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
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é.