Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 26/05/2006, 09h22   #1 (permalink)
Membre émérite
 
Date d'inscription: février 2006
Âge: 22
Messages: 883
Par défaut [VBA-E]Intervertir 2 selections

Hello,

on me demande d'intervertir 2 selections de meme taille.

par exemple, on selectionne un range de A1->B2 et A3->B4 puis on tape le raccourci clavier de la macro et les valeurs de ces 2 zones sont échangées (A1=A3 et A3=A1 etc...)

mais je ne vois pas comment faire ca (est ce faisable?). Pour l'instant mon idée est de le faire en demandant les 2 zones à l'utilisateur avec des inputbox puis apres ca devrait plus etre trop dur mais bon c'est pas top et on gagne pas enormement de temps

une ptite idée?
Elstak est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/05/2006, 09h38   #2 (permalink)
Membre émérite
 
Date d'inscription: février 2006
Âge: 22
Messages: 883
Par défaut

Citation:
Hello, y'avait longtemps
Désolé je fais pas le pont

Citation:
mais je crois, qu'à force, tu sais lire et écrire dans une cellule
(jcrois que tu commence à avoir l'habitude)

Je pense (si j'ai bien compris ce que tu me dis) que ta solution permet d'inverser les valeurs d'une selection. enfin jme trompe peut etre

Code :
    a = InputBox("Range1? exemple: A1:B2")
    RangeTemp = Range("" & a & "")
    b = InputBox("Range2? exemple: A1:B2")
    Range("" & a & "") = Range("" & b & "")
    Range("" & b & "") = RangeTemp
moi c'est ca que je voudrais faire mais là deja ca marche pas super, mon range 1 va dans le 2 et le 2 pas dans le 1
Elstak est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/05/2006, 09h43   #3 (permalink)
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 42
Messages: 7 742
Envoyer un message via Skype™ à bbil
Par défaut

tiens essai de comprendre ce code ... ( bon il copie que les données... si le format est aussi nécessaire.. faudra l'adapter ...)

Code :
 
 
Sub test()
 Dim r As Range
 Dim r1 As Range
 Dim r2 As Range
 Dim c As Variant
 Dim i As Integer
 Set r = Selection
 Debug.Print "--- Sélection en cours : " & r.Address
 If r.Areas.Count <> 2 Then
  MsgBox "Sélectionner 2 Zones dans feuille ( utiliser touche ctrl)"
  Exit Sub
 End If
 Set r1 = r.Areas(1)
 Set r2 = r.Areas(2)
 If r1.Count <> r2.Count Then
  MsgBox "Les 2 zones doivent être de même taille"
  Exit Sub
 End If
 Debug.Print " Zone 1 : " & r1.Address
 Debug.Print " Zone 2 : " & r2.Address
 For i = 1 To r1.Count
   c = r1(i)
   r1(i) = r2(i)
   r2(i) = c
 Next
End Sub
 
__________________
bbil : Impératif "A LIRE AVANT DE POSTER"
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 26/05/2006, 10h33   #4 (permalink)
Membre émérite
 
Date d'inscription: février 2006
Âge: 22
Messages: 883
Par défaut

Citation:
Envoyé par bbil
Code :
 
 
Sub test()
 Dim r As Range
 Dim r1 As Range
 Dim r2 As Range
 Dim c As Variant
 Dim i As Integer
 Set r = Selection
 Debug.Print "--- Sélection en cours : " & r.Address
 If r.Areas.Count <> 2 Then
  MsgBox "Sélectionner 2 Zones dans feuille ( utiliser touche ctrl)"
  Exit Sub
 End If
 Set r1 = r.Areas(1)
 Set r2 = r.Areas(2)
 If r1.Count <> r2.Count Then
  MsgBox "Les 2 zones doivent être de même taille"
  Exit Sub
 End If
 Debug.Print " Zone 1 : " & r1.Address
 Debug.Print " Zone 2 : " & r2.Address
 For i = 1 To r1.Count
   c = r1(i)
   r1(i) = r2(i)
   r2(i) = c
 Next
End Sub
 


alors là.... un grand merci !!
T'a bien compris ce que je cherchais à faire et mon gros souci c'etait surtout de voir les selections faites avant le lancement de la macro.

Entre les .address les .areas.count ... j'men serais pas sorti seul ( )

aller regardons ce code qui parait quand meme ridicule à coté de celui de bbil

Citation:
Envoyé par ouskel
Code :
 
Dim Tableau(3),i,NoLigne,NoCol
For i = 1 to 3
     Tableau(i) = Cells(NoLigne,i).value
Next
 
For i = 3 to 1 step-1
     NoCol = 4 -i
     Cells(NoLigne,NoCol).value = Tableau(i)
Next
 
(faut bien que jme foute de toi aussi des fois !!)


En tout cas merci à vous 2 pour vos réponses et votre rapidité (en meme temps ya pas grand monde aujourdhui )
Elstak est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/05/2006, 10h42   #5 (permalink)
Membre émérite
 
Date d'inscription: février 2006
Âge: 22
Messages: 883
Par défaut

Oh mais non mon dodo c'etait pas si mal ton code !!

( )





c'est juste que je comprenais pas bien le

Code :
For i = 1 to 3
je savais pas qu'on pouvait calculer le nombre de cellule d'une zone et je pensais que ton code ca allait que pour une ligne... ( )

Elstak est déconnecté   Envoyer un message privé Réponse avec citation
NEWS MS-OFFICEFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBA

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide