past special....transpose....

daxhilo

XLDnaute Nouveau
bonjour a tous,
c'est mon premier message dans cet forum,
je suis un utilisateur débutant mais j'ai un problème a résoudre

en effet j'ai un fichier excel avec une centaine de ligne que je doit convertir....

j'essaie de vous expliquer le problème, et excusez mes fautes de français ... suis étranger.

donc,
comme vous pouvez voir dans le fichier joint ....
j'ai doit d'abord effacer la premier ligne....
ensuite je doit pour chaque ville en colonne A, les donnes de la colonne B dans la colonne C en les transposant;
ensuite je doit effacer les lignes que m'ont servi pour copier les donnes .


(j'espère que en regardant l'exemple soit plus claire...il ya 2 feuille ( les donnes et le reultat que je doit obtenir)


merci a tous
j'espere que soit possible soit par formules soit par MACRO

David
 

Pièces jointes

  • test excel.xls
    38 KB · Affichages: 50
  • test excel.xls
    38 KB · Affichages: 47
  • test excel.xls
    38 KB · Affichages: 51

daxhilo

XLDnaute Nouveau
Re : past special....transpose....

bonjour a tout les 2, encore merci mille fois,
j'aurai une derniere probleme:

en effet je recois les date dans la colonne B en format 02/04/2011 et je doit l'obtenir en format : 02APR2011

je crois que je devrais utiliser la formule : ;[$-309]jjmmmaaa
mais je sais pas comment l'integrer dans votre code visual basic ni comme creer un bouton avec cet macro dedans :(

j'espere vous pourriez m'aider

bonne journee
 
Dernière édition:

klin89

XLDnaute Accro
Re : past special....transpose....

Re daxhilo,
Rien à voir avec la question initiale :

Un peu de bricolage :rolleyes:
En supposant que tes dates soient bien sous cette forme dans ta colonne B :
02/01/2011
03/02/2011
07/03/2011
20/04/2011
14/05/2011
etc....

Dans un module standard :
VB:
Option Base 1
Sub Convertir_Les_Dates()
Dim c As Range, n As Byte
liste_mois_francais = Array("/01/", "/02/", "/03/", "/04/", "/05/", "/06/", "/07/", "/08/", "/09/", "/10/", "/11/", "/12/")
liste_mois_anglais = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEPT", "OCT", "NOV", "DEC")
For Each c In Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row)
  jour = Left(c, 2)
  mois = Mid(c, 3, 4)
  an = Right(c, 4)
  n = 0
  For Each m In liste_mois_francais
    n = n + 1
    If m = mois Then Exit For
  Next m
  mois = liste_mois_anglais(n)
  c.Value = jour & mois & an
Next
End Sub

Tu obtiendras ceci :

02JAN2011
03FEB2011
07MAR2011
20APR2011
14MAY2011

Est-ce le résultat souhaité ?

Klin89
 

klin89

XLDnaute Accro
Re : past special....transpose....

Re daxhilo,

En rajoutant ceci au code du post #15 :

Code:
Set plage = Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row)
plage.NumberFormatLocal = "[$-409]jjmmmaaaa;@"
VB:
Sub test2()
Dim c As Range, plage As Range
Application.ScreenUpdating = False
Set c = Range("A2")
Set plage = Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row)
plage.NumberFormatLocal = "[$-409]jjmmmaaaa;@"
Do While c(2, 1) <> ""
  If c(2, 1) = c Then
    'If IsEmpty(Cells(c.Row, 3)) Then
    If Cells(c.Row, 256).End(xlToLeft)(1, 2).Column = 3 Then
      c.Offset(0, 1).Copy Cells(c.Row, 256).End(xlToLeft)(1, 2)
    End If
    c.Offset(1, 1).Copy Cells(c.Row, 256).End(xlToLeft)(1, 2)
    c(2, 1).EntireRow.Delete
  Else
    Set c = c(2, 1)
    c.Offset(0, 1).Copy Cells(c.Row, 256).End(xlToLeft)(1, 2)
  End If
Loop
Rows(1).Delete
Application.ScreenUpdating = True
End Sub

Edit : pas sûr que cela fonctionne avec une version antérieure à 2003

Klin89
 
Dernière édition:

klin89

XLDnaute Accro
Re : past special....transpose....

Re daxhilo,

Une variante à tester dans le fichier du post #1

VB:
Sub Transposer()
Dim i As Long, j As Long, X As String
With Sheets("origin")
'ici on n'efface pas les données des colonnes A et B
'on transpose à partir de la colonne D
 X = .Range("A2"): .Range("D2") = X
  For i = 2 To .Range("A65536").End(xlUp).Row
    If .Cells(i, 1) = X Then
      j = .Range("D65536").End(xlUp).Row
      If .Cells(j, 256).End(xlToLeft).Column = 4 Then
        .Cells(j, 256).End(xlToLeft).Offset(0, 1).Resize(1, 2) = .Cells(i, 2)
      Else
        .Cells(j, 256).End(xlToLeft).Offset(0, 1) = .Cells(i, 2)
      End If
    Else
      j = .Range("D65536").End(xlUp).Offset(1, 0).Row
      .Cells(j, 4) = .Cells(i, 1)
      If .Cells(j, 256).End(xlToLeft).Column = 4 Then
        .Cells(j, 256).End(xlToLeft).Offset(0, 1).Resize(1, 2) = .Cells(i, 2)
      Else
        .Cells(j, 256).End(xlToLeft).Offset(0, 1) = .Cells(i, 2)
      End If
      X = .Cells(i, 1)
    End If
  Next i
End With
End Sub

Attention à l'espace superflu en A5 :rolleyes:

Klin89
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet