Menu

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

Messages postés
576
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
12 septembre 2018
- 4 sept. 2018 à 21:42 - Dernière réponse :
Messages postés
576
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
12 septembre 2018
- 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

8 réponses

Meilleure réponse
Messages postés
6909
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2018
Modifié par yg_be le 4/09/2018 à 22:53
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?

Merci yg_be 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 28835 internautes ce mois-ci

Messages postés
576
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
12 septembre 2018
- 5 sept. 2018 à 00:07
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 :)
Messages postés
6909
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2018
>
Messages postés
576
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
12 septembre 2018
- 5 sept. 2018 à 09:18
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.
Messages postés
576
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
12 septembre 2018
- 5 sept. 2018 à 15:56
Ç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 :)
Messages postés
6909
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2018
>
Messages postés
576
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
12 septembre 2018
- 5 sept. 2018 à 22:17
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
Messages postés
576
Date d'inscription
vendredi 29 avril 2005
Dernière intervention
12 septembre 2018
- 12 sept. 2018 à 20:35
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