Echange de lignes sous excel en VB.net

Fermé
la mout' - 25 mai 2008 à 18:49
 la mout' - 27 mai 2008 à 15:25
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.
A voir également:

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
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.
0
bonjour,

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.
0
soludo Messages postés 65 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 3 septembre 2009 3 > la mout'
27 mai 2008 à 14:36
Bonjour,
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
0
la mout' > soludo Messages postés 65 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 3 septembre 2009
27 mai 2008 à 15:25
Nous avions bien compri qu'il fallait réadapter la macro d'excel seulement c'est justement ce que l'on arrive pas à faire !
merci quand même!
0
Après réflexion, nous avons essayé votre solution en utilisant une feuille masquée sous excel, malheureusement le problème n'est pas résolu. Sous VB.net la syntaxe suivante ne fonctionne pas :

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
0
soludo Messages postés 65 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 3 septembre 2009 3 > la mout'
27 mai 2008 à 14:57
Voici un lien qui pourra surement vous être utile... https://vb.developpez.com/faqs/
0