[VBA]INTERVERTIR 2 CELLULES [Résolu]

Messages postés
13
Date d'inscription
lundi 15 juin 2009
Dernière intervention
2 novembre 2011
- - Dernière réponse : cs_domimeca
Messages postés
13
Date d'inscription
lundi 15 juin 2009
Dernière intervention
2 novembre 2011
- 24 oct. 2011 à 21:39
Bonjours
J'ai trouver sur le net un code qui me permet d'intervertir 2 cellules. Il marche trés bien mais il ne change que les valeurs.Je lui ai ajouté une msgox , un renvois sur une autre macro,deverouiller et reverouiller ma feuille mais mon petit niveau ne me permet pas de faire en sorte que la couleur des cellule change egalement.
Le code:
Sub echange()
ActiveSheet.Unprotect
Dim cval(), cadd()
a = 1
ReDim cval(2), cadd(2)
For Each usrcell In Selection
cval(a) = usrcell.Value
cadd(a) = usrcell.Address
a = a + 1
Next usrcell
Range(cadd(1)).Select
ActiveCell = cval(2)
If (cadd(2)) = False Then
MsgBox "Veuillez séléctionner un autre véhicule"
Else
Range(cadd(2)).Select
ActiveCell = cval(1)

Run ("tri")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End Sub

quelqu'un peut-il m'aider?
D'avance merci.
DOMIMECA
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
3
Merci
Salut

"Il marche trés bien mais il ne change que les valeurs"
Mystère n°1
Ça marche, mais ça marche pas

"un renvois sur une autre macro,deverouiller et reverouiller"
Mystère n°2
Quel rapport avec la première phrase ?

"de faire en sorte que la couleur des cellule change egalement"
Mystère n°3
Maintenant, c'est la couleur.

Va falloir être plus précis.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Merci cs_Jack 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Bonjour,

Avant tout : tu développes donc sous VBA et non VB6 ! Nous te serions reconnaissant de veiller dorénavant à apporter le plus grand soin au choix de la section dans laquelle tu ouvres une discussion.

Nous te serions reconnaissant de bien vouloir également présenter ton code comme il se doit (indenté et mis entre balises code)
___________

Je suppose que tu veux dire (mais l'a dit très mal, comme le souligne jack) que ton code intervertit bien les valeurs, mais en perdant les mises en forme.
Tout-à-fait normal puisqu'il ne traite que le contenu des cellules (au demeurant fort mal ... je me demande où tu as trouvé un tel "code/gymcana"... celui qui l'a écrit n'a pas l'air d'avoir compris comment on passe d'une plage à un tableau dynamique et vice-versa !)
Si tu veux intervertir tout (donc valeur + mise en forme), il te faut alors utiliser la méthode Copy (ouvre ton aide VBA sur ce mot). Tu devras probablement, à ce propos, utiliser une cellule tremplin.
Voilà ! commence à travailler avec cette piste. Reviens si toujours difficulté, mais en nous montrant (code) ce que tu as tenté d'écrire dans ce sens-là.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Et de surcroît ('à propos du code que tu as "trouvé") :
Comment peut-on écrire :
cadd(a) = usrcell.Address

puis
If (cadd(2)) = False Then 



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Dernière intervention
20 novembre 2013
3
Merci
Salut,

un exempm=le ici

Range("B4").Cut Destination:=Range("E4")
Range("C4").Cut Destination:=Range("B4")
Range("E4").Cut Destination:=Range("C4")


A+

Merci bigfish_le vrai 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de bigfish_le vrai
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Dernière intervention
20 novembre 2013
3
Merci
re,

bon ouai... cela mérite une petite explication:

seul les méthodes copy/paste ou cut/paste permettent de déplacer un objet de type Range.

l'exemple que je t'ai donné utilise un cellule intermédiaire (E4 dans l'exemple) pour réussir cette interversion.

voici une autre méthode par l'ajout d'une cellule "intermédiaire":

    Range("B4").Insert Shift:=xlToRight
    Range("D4").Cut Destination:=Range("B4")
    Range("D4").Delete Shift:=xlToLeft


A+

Merci bigfish_le vrai 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de bigfish_le vrai
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Dernière intervention
30 octobre 2013
3
Merci
bigfish_le vrai, Joli !!!

Merci 4u4me4us 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de 4u4me4us
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Oui ?
Et nous t'avons donc répondu !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
C'est quand même enfantin !

Exemple
Private tremplin As Range
Private Sub CommandButton1_Click()
  ' c'est là que tu décides d'où tu veux ton tremplin.
  ' Tu peux même le choisir sur une autre feuille
  Set tremplin = Range("F8") 
  intervertir ' et c'est là que tu dis d'intervertir (appel de la sub)
End Sub

Private Sub intervertir()
  If selection Is Nothing Or selection.Count = 1 Or selection.Count > 2 Then
    MsgBox "vous devrez sélectionner 2 cellules et uniquemenjt 2"
  Else
    Dim cel1 As Range, cel2 As Range
    Set cel1 = selection.Areas(1)
    Set cel2 = selection.Areas(2)
    cel1.Copy Destination:=tremplin
    cel2.Copy Destination:=cel1
    tremplin.Copy Destination:=cel2
  End If
  
End Sub

Voilà ! y compris les garde-fous (vérification de ce que deux cellules et deux seules ont été sélectionnées).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
13
Date d'inscription
lundi 15 juin 2009
Dernière intervention
2 novembre 2011
0
Merci
Ok Ok merci a tous je me suis mal exprimé.
Le but:
J'ai 5 colonnes de couleurs differentes A(rouge) B(bleu) C(vert) D(jaune),je selectionne A3 avec ma souris puis C5 en maintenant Ctrl.Donc les deux cellules sont relativement actives. Lorsque j'execute ma macro la valeur de A3 se trouve en C5 et celle de C5 en A3. Par contre C5 avec sa nouvelle valeur est toujours vert or je voudrais qu'elle soit rouge (couleur d'origine associée a cette dite valeur)même probleme pour A3.Je veux pouvoir faire cela avec n'importe quelle paire de cellules que je selectionne.

Le code original sans mes bricolages
Sub echange() 
Dim cval(), cadd() 
a = 1 
ReDim cval(2), cadd(2) 
For Each usrcell In Selection 
cval(a) = usrcell.Value 
cadd(a) = usrcell.Address 
a = a + 1 
Next usrcell 
Range(cadd(1)).Select 
ActiveCell = cval(2) 
Range(cadd(2)).Select 
ActiveCell = cval(1) 
End Sub


J'espere être plus clair


DOMIMECA
Commenter la réponse de cs_domimeca
Messages postés
13
Date d'inscription
lundi 15 juin 2009
Dernière intervention
2 novembre 2011
0
Merci
Nickel. Merci Ucfoutu pour ta patience.Il y a quelques années je bricolais VBA mais c'est pas comme le vélo, ça s'oublie. Ceci dit je ne suis vraiment pas sûr d'y être arrivé seul. Donc encore merci et il va falloir que je m'y remette pour ne pas trop abuser de votre patience.


DOMIMECA
Commenter la réponse de cs_domimeca

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.