Attribuer un champ à tous les éléments de la ligne (exemple)

Résolu/Fermé
DesTunK Messages postés 361 Date d'inscription dimanche 27 janvier 2013 Statut Membre Dernière intervention 24 février 2016 - 9 févr. 2016 à 16:08
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 - 10 févr. 2016 à 09:57
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)


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:

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
9 févr. 2016 à 16:41
Bonjour,

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+
1
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
9 févr. 2016 à 16:52
Plus efficace que ma proposition car moins de Select's ;)

Je dois apprendre à moins les utiliser pour gagner en perf :s

Merci Gyrus ;)
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016
9 févr. 2016 à 17:18
Salut Theo.R,

C'est effectivement une très bonne habitude à prendre. Personnellement, je les bannis autant que faire se peut.

A+
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31 > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
9 févr. 2016 à 17:26
Si je peux me permettre, j'aurais 3 questions sur ton style de code :

1) "Set" : quelle différence fait-il ? On aurait pas le même résultat entre :
Set WsS = Worksheets("Feuil1")
et
WsS = Worksheets("Feuil1")
?

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
Sheets(1).Range("A1").value = X
ne fonctionne pas. C'est pour cette raison que tu passes par la fonction Cells(...) plutôt que Range(...) ?

Merci d'avance :D
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016
9 févr. 2016 à 17:59
1) L'instruction Set permet d'attribuer une référence d'objet à la variable.

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+
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31 > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
9 févr. 2016 à 18:04
Merci pour tes réponses rapides ! :-)
0
ccm81 Messages postés 10879 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 septembre 2024 2 415
9 févr. 2016 à 17:05
Bonjour

Un essai avec une (petite) macro
http://www.cjoint.com/c/FBjqeyzjtFI

Cdlmnt
1
DesTunK Messages postés 361 Date d'inscription dimanche 27 janvier 2013 Statut Membre Dernière intervention 24 février 2016 157
10 févr. 2016 à 09:13
Ca fonctionne parfaitement merci :)
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
9 févr. 2016 à 16:47
bonjour,

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
0
DesTunK Messages postés 361 Date d'inscription dimanche 27 janvier 2013 Statut Membre Dernière intervention 24 février 2016 157
10 févr. 2016 à 09:17
Ca fonctionne parfait, merci :)-
0