Attribuer un champ à tous les éléments de la ligne (exemple)
Résolu
DesTunK
Messages postés
361
Date d'inscription
Statut
Membre
Dernière intervention
-
Theo.R Messages postés 575 Date d'inscription Statut Membre Dernière intervention -
Theo.R Messages postés 575 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaite convertir les lignes de mon tableau qui contiennent le même ID (COLA) en les mettant un colonne plutôt qu'en ligne (exemple si dessous)
Merci d'avance à tous, cordialement
Je souhaite convertir les lignes de mon tableau qui contiennent le même ID (COLA) en les mettant un colonne plutôt qu'en ligne (exemple si dessous)
COLA COLB COLC COLD
11 Philippe Johan
12 Didier Yann Luc
COLA COLB
11 Philippe
11 Johan
12 Didier
12 Yann
12 Luc
Merci d'avance à tous, cordialement
A voir également:
- Attribuer un champ à tous les éléments de la ligne (exemple)
- Tableau word exemple - Guide
- Partage de photos en ligne - Guide
- Aller à la ligne excel - Guide
- Url exemple - Guide
- Mètre en ligne - Guide
3 réponses
Bonjour,
Avec une macro qui transfère les données de la Feuil1 vers la Feuil2.
A+
Avec une macro qui transfère les données de la Feuil1 vers la Feuil2.
Sub Test()
Dim WsS As Worksheet, WsC As Worksheet
Dim DerLig As Long, LigneS As Long, LigneC As Long
Dim DerColS As Integer, ColS As Integer
Set WsS = Worksheets("Feuil1") 'Feuille source
Set WsC = Worksheets("Feuil2") 'Feuille cible
DerLigs = WsS.Range("A" & Rows.Count).End(xlUp)
LigneC = 1
For LigneS = 1 To DerLigs
DerColS = WsS.Cells(LigneS, Columns.Count).End(xlToLeft).Column
For ColS = 2 To DerColS
WsC.Cells(LigneC, 1) = WsS.Cells(LigneS, 1)
WsC.Cells(LigneC, 2) = WsS.Cells(LigneS, ColS)
LigneC = LigneC + 1
Next ColS
Next LigneS
End Sub
A+
bonjour,
Le code suivant fonctionne pour une feuille source en première position et une feuille vierge (cible) en 2ème position :
Le code suivant fonctionne pour une feuille source en première position et une feuille vierge (cible) en 2ème position :
Sub test()
Dim DernLigne As Long
DernLigne = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
m = 1
For i = 1 To DernLigne
Sheets(1).Select
x = WorksheetFunction.CountIf(Rows(i & ":" & i), "<>") - 1
Sheets(1).Select
Range("A" & i).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets(2).Select
Range("B" & m).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
Range("B" & m).Select
Selection.Copy
Range("A" & m + 1 & ":A" & m + x).Select
ActiveSheet.Paste
Rows(m & ":" & m).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
m = m + x
Next i
End Sub
Je dois apprendre à moins les utiliser pour gagner en perf :s
Merci Gyrus ;)
C'est effectivement une très bonne habitude à prendre. Personnellement, je les bannis autant que faire se peut.
A+
1) "Set" : quelle différence fait-il ? On aurait pas le même résultat entre : et ?
2) En m'autoformant au VBA, j'ai appris à définir les types d'objets qu'on utilise avec la fonction "Dim ... as ...", mais mon peu d'expérience m'amène à m'interroger sur l'utilité de cette procédure préalable.. Par exemple j'ai essayé ton code sans les "Dim" et il marche de la même manière ! Dans quels cas cela fait une différence ?
3) je passe souvent par des .Select pour changer de feuille car mettre ne fonctionne pas. C'est pour cette raison que tu passes par la fonction Cells(...) plutôt que Range(...) ?
Merci d'avance :D
Exemple :
Avec l'instruction Set C=Range("A1") , la variable C représente la cellule A1.
C.address renvoie $A$1 et C.value renvoie la valeur de A1.
Par contre, si tu écris C=Range("A1"), Excel va comprendre que tu attribues la valeur de A1 à la variable C.
2) L'instruction Dim déclare et alloue de l'espace de stockage pour une (ou plusieurs) variable(s). Là encore, bien que Excel tolère que les variables ne soient pas déclarées, il est important de prendre l'habitude de la faire, ne serait-ce que pour optimiser la mémoire. Pour t'obliger à effectuer cette déclaration, tu peux activer Option Explicit en amont de la procédure.
3) Sheets(1).Range("A1").value = "X" fonctionne très bien.
de même que :
Sheets("Feuil1").Range("A1")="X"
Sheets("Feuil1").Cells(1,1)="X"
A+