A voir également:
- Echange de lignes sous excel en VB.net
- Aller à la ligne excel - Guide
- Liste déroulante excel - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Mise en forme conditionnelle excel - Guide
- Si et excel - Guide
1 réponse
soludo
Messages postés
65
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2009
3
26 mai 2008 à 11:04
26 mai 2008 à 11:04
Bonjour,
Je ne suis pas sur d'avoir saisie ton problème... Si tu veux interchanger deux lignes... tu as de nombreuses solution mais détails d'avantage ton problème ça sera plus simple de t'aider.
Dans tout les cas ce que je te conseil c'est d'utiliser une autre feuille qui te servirai pour le transfert... (feuille masquée)
ça te donnerai quelque chose dans ce style :
Sheets("Feuille masquée").Range("A1") = Sheets("Mafeuille").Range("A" & Numéro_Ligne1)
Sheets("Feuille masquée").Range("A2") = Sheets("Mafeuille").Range("A" & Numéro_Ligne2)
Ensuite il ne te reste plus qu'à faire l'exercice inverse :
Sheets("Mafeuille").Range("A" & Numéro_Ligne1) = Sheets("Feuille masquée").Range("A2")
Sheets("Mafeuille").Range("A" & Numéro_Ligne2) = Sheets("Feuille masquée").Range("A1")
Tien moi au courant.
Je ne suis pas sur d'avoir saisie ton problème... Si tu veux interchanger deux lignes... tu as de nombreuses solution mais détails d'avantage ton problème ça sera plus simple de t'aider.
Dans tout les cas ce que je te conseil c'est d'utiliser une autre feuille qui te servirai pour le transfert... (feuille masquée)
ça te donnerai quelque chose dans ce style :
Sheets("Feuille masquée").Range("A1") = Sheets("Mafeuille").Range("A" & Numéro_Ligne1)
Sheets("Feuille masquée").Range("A2") = Sheets("Mafeuille").Range("A" & Numéro_Ligne2)
Ensuite il ne te reste plus qu'à faire l'exercice inverse :
Sheets("Mafeuille").Range("A" & Numéro_Ligne1) = Sheets("Feuille masquée").Range("A2")
Sheets("Mafeuille").Range("A" & Numéro_Ligne2) = Sheets("Feuille masquée").Range("A1")
Tien moi au courant.
27 mai 2008 à 09:19
Tout d'abaord merci pour vos premiers renseignements.
Pour plus de précision par rapport à ma question, nous effectuons un tri sur excel or, ne sachant pas interchanger les lignes sous excel, provisoirement nous échangeons les lignes cellules par cellules, mais ceci est trés couteux en temps et quasiment impossible à réaliser sur un fichier de 10 000 lignes !
Pour mieux comprendre, voici actuellement notre procédure échange
'fonction qui echange 2 lignes, colonne par colonne
Public Sub Pechange (ByRef f as Object, ByVal a As String, ByVal b As String)
Dim i As Integer
Dim aux As String
' on échange les lignes a et b
For i=1 To ncols
aux=f.cells(a,i).value
f.cells(a,i).value=f.cells(b,i).value
f.cells(b,i).value=aux
Next
End Sub
En ce qui concerne la première solution que vous nous avez présenté, elle parait interessante mais, nous ne savons pas créer ni manipuler une feuille masquée!
merci pour tous vos renseignements.
27 mai 2008 à 14:36
Le plus simple pour un tri d'une telle envergure, c'est d'enregistrer la macro directement avec l'utilitaire d'Excel puis de l'adapter à vos besoins...
Le tri est une des fonctions les mieux construite par la le système de création de macro d'Excel...
cela doit donner quelque chose de ce style là :
Dim Derli As Long
Derli = Sheets("MaFeuilleATrier").Columns(1).Find("*", , , , , xlPrevious).Row
ActiveWorkbook.Worksheets("MaFeuilleATrier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("MaFeuilleATrier").Sort.SortFields.Add Key:=Range( _
"A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("MaFeuilleATrier").Sort
.SetRange Range("A1:A" & Derli)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
'.SortMethod = xlPinYin
.Apply
End With
End Sub
Si besoin d'explication supplémentaire... n'hésitez pas
27 mai 2008 à 15:25
merci quand même!
27 mai 2008 à 14:32
Public Sub Pechange (ByRef f as Object, Byref f2 as Object,ByVal a As String, ByVal b As String)
f2.range(1,1)=f.range(a,1)
f2.range(2,1)=f.range(b,1)
f.Range(a,1) = f2.Range(2,1)
f.Range(b,1) =f2.Range(1,1)
End sub
Nous n'avons pas beaucoup manipulé excel par l'intermédiaire de VB.net au cours de l'année, donc nous ne connaissons pas le langage associé.
Merci
27 mai 2008 à 14:57