COPIER/ COLLER RANGE variable dans des onglets différents VBA
Résolu/Fermé
sandero1970
Messages postés
2
Date d'inscription
lundi 26 août 2013
Statut
Membre
Dernière intervention
26 août 2013
-
26 août 2013 à 10:25
sandero1970 - 26 août 2013 à 16:27
sandero1970 - 26 août 2013 à 16:27
A voir également:
- COPIER/ COLLER RANGE variable dans des onglets différents VBA
- Copier coller pdf - Guide
- Copier-coller - Accueil - Windows
- Historique copier-coller android - Guide
- Symbole clavier copier coller - Guide
3 réponses
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
26 août 2013 à 11:28
26 août 2013 à 11:28
Bonjour,
A+
Public Sub CopyRows() Dim WsS As Worksheet, WsC As Worksheet Dim FinalRow As Long Dim FinalCol As Integer Dim NomFeuille As String Set WsS = Worksheets("Consultants") FinalRow = WsS.Cells(Rows.Count, 1).End(xlUp).Row For x = 2 To FinalRow NomFeuille = WsS.Cells(x, 4).Value If FeuilleExiste(NomFeuille) Then FinalCol = WsS.Cells(x, Columns.Count).End(xlToLeft).Column WsS.Range(Cells(x, 1), Cells(x, FinalCol)).Copy Set WsC = Worksheets(WsS.Cells(x, 4).Value) With WsC .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True End With Application.CutCopyMode = False End If Next x Set WsC = Nothing: Set WsS = Nothing End Sub Function FeuilleExiste(NomFeuille As String) As Boolean Dim Ws As Worksheet FeuilleExiste = False For Each Ws In ActiveWorkbook.Worksheets If Ws.Name = NomFeuille Then FeuilleExiste = True End If Next End Function
A+
sandero1970
Messages postés
2
Date d'inscription
lundi 26 août 2013
Statut
Membre
Dernière intervention
26 août 2013
26 août 2013 à 13:07
26 août 2013 à 13:07
Merci Gyrus,
Ill y a un souci: Il copie bien les bonnes lignes dans la bonne feuille mais au mauvais endroit.
Il copie chaque fois dans la colonne A à la première cellule libre or je voudrais qu'on copie comme suit:
Si dans Consultants on a 3 lignes "P1", je voudrais que les données des colones D et E de ma feuille consultants soient copiées de manière transposées dans une nouvelle colonne en ligne 3 et 4 de la feuille P1.
Donc si mon range de WsS= (D2:E4), je voudrais que
D2:E2 soit copiée dans WsC B3:B4
D3:E3 C3:C4
D4:E4 D3:D4
or ici, D2:E2, est copié en (Ai:Ai+1), D3:E3 en (Ai+2:Ai+3).... ainsi de suite.
Merci pour ton aide
Ill y a un souci: Il copie bien les bonnes lignes dans la bonne feuille mais au mauvais endroit.
Il copie chaque fois dans la colonne A à la première cellule libre or je voudrais qu'on copie comme suit:
Si dans Consultants on a 3 lignes "P1", je voudrais que les données des colones D et E de ma feuille consultants soient copiées de manière transposées dans une nouvelle colonne en ligne 3 et 4 de la feuille P1.
Donc si mon range de WsS= (D2:E4), je voudrais que
D2:E2 soit copiée dans WsC B3:B4
D3:E3 C3:C4
D4:E4 D3:D4
or ici, D2:E2, est copié en (Ai:Ai+1), D3:E3 en (Ai+2:Ai+3).... ainsi de suite.
Merci pour ton aide
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
26 août 2013 à 14:20
26 août 2013 à 14:20
Tu peux tester comme cela.
Sans exemple je n'irai pas plus loin.
A+
Public Sub CopyRows() Dim WsS As Worksheet, WsC As Worksheet Dim FinalRow As Long Dim FinalCol As Integer Dim NomFeuille As String Set WsS = Worksheets("Consultants") FinalRow = WsS.Cells(Rows.Count, 1).End(xlUp).Row For x = 2 To FinalRow NomFeuille = WsS.Cells(x, 4).Value If FeuilleExiste(NomFeuille) Then FinalCol = WsS.Cells(x, Columns.Count).End(xlToLeft).Column WsS.Range(Cells(x, 1), Cells(x, FinalCol)).Copy Set WsC = Worksheets(WsS.Cells(x, 4).Value) With WsC .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, .Cells(2, Columns.Count).End(xlToLeft).Column + 1).PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True End With Application.CutCopyMode = False End If Next x Set WsC = Nothing: Set WsS = Nothing End Sub Function FeuilleExiste(NomFeuille As String) As Boolean Dim Ws As Worksheet FeuilleExiste = False For Each Ws In ActiveWorkbook.Worksheets If Ws.Name = NomFeuille Then FeuilleExiste = True End If Next End Function
Sans exemple je n'irai pas plus loin.
A+
Ai résolu de telle façon:
Sub CopyRowsToColumns()
Dim i, j, line, n As Integer ' n = nameof candidate s = status of candidate n = nbr of CV
'Dim r1, r2 As Range
For i = 1 To 30
n = Sheets("Profiles").Cells(i + 1, 4)
For j = 1 To n
line = 2 'start line after headings
Sheets("P" & i).Cells(line, j + 1) = "Consultant" & j
line = line + 1
Sheets("P" & i).Cells(line, j + 1) = "NTBA " & i & "_C" & j
line = line + 1
Sheets("P" & i).Cells(line, j + 1) = "STBA " & i & "_C" & j
Next j
Next i
End Sub
Sub CopyRowsToColumns()
Dim i, j, line, n As Integer ' n = nameof candidate s = status of candidate n = nbr of CV
'Dim r1, r2 As Range
For i = 1 To 30
n = Sheets("Profiles").Cells(i + 1, 4)
For j = 1 To n
line = 2 'start line after headings
Sheets("P" & i).Cells(line, j + 1) = "Consultant" & j
line = line + 1
Sheets("P" & i).Cells(line, j + 1) = "NTBA " & i & "_C" & j
line = line + 1
Sheets("P" & i).Cells(line, j + 1) = "STBA " & i & "_C" & j
Next j
Next i
End Sub