Menu

Inverser plages sur sélection cellules [Résolu]

Messages postés
582
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
17 janvier 2019
- - Dernière réponse : Nai
Messages postés
582
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
17 janvier 2019
- 12 sept. 2018 à 20:35
Bonsoir toutes et tous ! :)
J'aimerais pouvoir inverser deux plages en sélectionnant deux cellules (permettant d'identifier les plages mais n'en faisant pas partie), sauf que ces plages font parti d'un tableau entier (voir fichier)
L'idée est de pouvoir inverser deux enfants en sélectionnant le numéro du premier enfant (de 1 à 8) d'un tableau (de 1 à 8) PUIS faire l'inversion à la deuxième sélection (du deuxième enfant).
Peut-être y a-t-il plus simple, plus pratique, plus efficace ou moins contraignant ?

Je suis parvenu à inverser deux cellules. Mais autant dire que là je suis loin du résultat voulu.
S'il fallait partir sur cette macro, je n'ai même pas réussi à inverser deux plages bien définies lol

Sub inverser_enfants()
Dim temporaire As String
 temporaire = Range("B6").Value
 Range("B6").Value = Range("J6").Value
 Range("J6").Value = temporaire
 End Sub

Ça fonctionne, mais bon, je suis loin ^^

Sub inverser_enfants()
Dim temporaire As String
 temporaire = Range("B6:G6").Value
 Range("B6:G6").Value = Range("J6:O6").Value
 Range("J6:O6").Value = temporaire
 End Sub

Ne fonctionne pas :/

Une fois de plus, merci beaucoup pour votre aide :)

Le tableau extrait : https://www.cjoint.com/c/HIetHpFnYBe
Le fichier final dans la feuille "Tableau baignade" : https://www.cjoint.com/c/HIetQNPnege


Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
7570
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mars 2019
450
1
Merci
bonsoir, et en faisant
Dim temporaire As Variant
?
je ne comprends pas ce que sont les deux fichiers que tu partages. que signifie "tableau extrait"?
"Ne fonctionne pas": message d'erreur, comportement inattendu?

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 48657 internautes nous ont dit merci ce mois-ci

Nai
Messages postés
582
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
17 janvier 2019
55 -
C'est la solution (temporaire) que je vais utiliser ^^
En attendant de trouver mieux :)
Le problème réside dans le fait que je partage le fichier et que je le souhaite simple (je le trouve déjà pas mal compliqué :s).
J'envisage un fichier d'aide (me suis renseigné, et c'est pas si simple lol).

Si quelqu'un a une meilleure solution, je suis preneur :)
yg_be
Messages postés
7570
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mars 2019
450 > Nai
Messages postés
582
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
17 janvier 2019
-
une autre solution, à toi de dire si elle est préférable: en t'inspirant de ce que tu fais pour les ajouts et suppressions, ajouter une case "échange" devant chaque ligne de tableau. si l'utilisateur clique successivement deux cases échange, cela déclenche l'échange.
Nai
Messages postés
582
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
17 janvier 2019
55 -
Ça ce serait tip top ! :D
Mais c'est compliqué :/
Penses-tu pouvoir me filer une trame que je compléterais pour toutes les cases ? ^^
Ça me permet de piger le fonctionnement :)
yg_be
Messages postés
7570
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mars 2019
450 > Nai
Messages postés
582
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
17 janvier 2019
-
je suggère de faire ainsi:
- permettre de cliquer sur les numéros d'ordre dans les tableaux
- modifier le code ainsi:
après la ligne Private Sub Worksheet_SelectionChange(ByVal Target As Range), ajouter:
    Static echangeant As Boolean
    Static echang_1 As Range

juste avant Traite_Erreur:, ajouter:
    If Target.Count = 1 Then
        If Not (Intersect(Target, _
           Range("a17:a24, i17:i24, a29:a36, i29:i36, a41:a48, i41:i48, a53:a60, i53:i60")) _
           Is Nothing) Then ' on a cliqué dans un tableau
            If echangeant Then
                Call echangeons(echang_1, Target)
                echangeant = False
            Else
                echangeant = True
                Set echang_1 = Target
            End If
        Else
            echangeant = False
        End If
    Else
        echangeant = False
    End If

à la fin du module, ajouter:
Private Sub echangeons(r1 As Range, r2 As Range)
 Dim temporaire As Variant
 temporaire = r1.Offset(0, 1).Resize(, 6)
 r1.Offset(0, 1).Resize(, 6).Value = r2.Offset(0, 1).Resize(, 6).Value
 r2.Offset(0, 1).Resize(, 6).Value = temporaire
 End Sub
Nai
Messages postés
582
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
17 janvier 2019
55 -
Bonsoir !
C'est magnifique ! Merci beaucoup ! :D
EDIT: est-ce c'est possible d'afficher les noms et prénoms des enfants concernés par l'échange de le MsgBox ?
Commenter la réponse de yg_be