Echange de lignes sous excel en VB.net
la mout'
-
la mout' -
la mout' -
Bonjour,
Je souhaiterais avoir des renseignements:
J'aimerais avoir la synthaxe en VB.net qui permet d'échanger deux lignes sous excel. Et ceci, dans le cadre d'une fonction échange qui sert au sein d'un programme.
Il me semble qu'il faut se servir de la macro que nous donne excel mais je n'y arrive pas !
Merci d'avance pour votre aide.
Je souhaiterais avoir des renseignements:
J'aimerais avoir la synthaxe en VB.net qui permet d'échanger deux lignes sous excel. Et ceci, dans le cadre d'une fonction échange qui sert au sein d'un programme.
Il me semble qu'il faut se servir de la macro que nous donne excel mais je n'y arrive pas !
Merci d'avance pour votre aide.
A voir également:
- Echange de lignes sous excel en VB.net
- Liste déroulante excel - Guide
- Partage de photos en ligne - Guide
- Word et excel gratuit - Guide
- Mise en forme conditionnelle excel - Guide
- Aller à la ligne excel - Guide
1 réponse
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.
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.
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
merci quand même!
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