[Déplacé .Net --> VBA] Problème pour sélectionner dans une macro 2 cellules cont [Résolu]

Signaler
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
28 octobre 2011
-
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
28 octobre 2011
-
Bonjour,

Voilà un moment que j'essaie toutes les solutions qui me passent par l'esprit, sans pour autant parvenir à résoudre ce problème en apparence fort simple.

Dans ma feuille j'ai une cellule que j'ai nommé : "NbUXParCC2a".

Je veux tout simplement sélectionner cette cellule et celle qui se trouve immédiatement à droite, pour les fusionner.

J'ai rédigé la routine suivante qui fonctionne bien jusqu'à un certain point :

Sub Macro()

Dim lolo1 As Range, lolo2 As Range

Set lolo1 = [NbUXParCC2a]
Set lolo2 = lolo1.Offset(0, 1)

'j'ai essayé entre autre ça --> ERREUR
'Range("lolo1" & ":" & "lolo2").Select
'Selection.Merge

End Sub

Un grand merci pour m'aider à résoudre ce problème.

11 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Et encore plus simple à comprendre et "collant" encore plus à tes connaissances actuelles (toujours sans set et sans Union ... juste en composant la plage) :

With ActiveSheet
     .Range([NbUXParCC2a], [NbUXParCC2a].Offset(0, 1)).Merge
  End With


Comme nous pouvons le voir, VBA offre plusieurs solutions.3 A nous de choisir la moins "chère" en ressources.
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut
"routine qui fonctionne bien jusqu'à un certain point"
Jusqu'à quel point ?
La prochaine fois, soit plus précis.

Essaye ça :
    Range(Cells(lolo1.Row, lolo1.Column), Cells(lolo1.Row, lolo1.Column + 1)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge

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)
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
28 octobre 2011

Merci pour ton attention, mais, ma foi, je pense avoir été assez clair.
Le "certain point" n'étant ni plus ni moins que le moment, dans la macro, où je place des REM ("'").
J'ai finalement, intuitivement, trouvé la solution :

Sub Macro()

Dim lolo1 As Range, lolo2 As Range

Set lolo1 = [NbUXParCC2a]
Set lolo2 = lolo1.Offset(0, 1)

Union(lolo1,lolo2).Merge

End Sub

Et ça marche parfaitement bien.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
lol, bah tu m'as appris quelque chose !
"Union" : je le note
Ma solution fonctionnait aussi.

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)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,,
ce qui aurait également pu être direcxtempent écrit ainsi :

With ActiveSheet
  .Range(Cells(.Range("NbUXParCC2a").Row, .Range("NbUXParCC2a").Column), Cells(.Range("NbUXParCC2a").Row, .Range("NbUXParCC2a").Column + 1)).Merge
End With
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Ce qui pourrait également (bien écvidemment) s'exprimer aussi ainsi :

cel1 = Range("NbUXParCC2a").Address(RowAbsolute:=False, columnabsolute:=False)
cel2 = Range("NbUXParCC2a").Offset(0, 1).Address(RowAbsolute:=False, columnabsolute:=False)
With ActiveSheet
.Range(cel1 & ":" & cel2).Merge
End With
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
28 octobre 2011

Bonjour,

Effectivement, Jack, il fallait utiliser la fonction "Union". C'est grâce à mes réminiscences des maudites maths modernes, qui ont fait disjoncter toute une génération, que j'ai pensé à "Union" et, bingo, ça existait en VBA.

Les solutions de ucfoutu fonctionnent mais au travers de "phrases" qui n'en finissent pas et fatiguent les neurones.

Le pied dans une procédure quelle qu'elle soit est de la réaliser avec le plus de concision possible.
Dans ma solution il n'y a juste que 2 variables à déclarer (lolo1 & lolo2) et le reste est court, bref, intelligible et très maniable quelles que soient les circonstances.
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Bien évidemment, que la solution Union fatigue moins les méninges (mais pas celles de ta machine, à laquelle tu imposes deux set ... songe au moins à les zigouiller ensuite.).
Une solution "directe" peut paraître plus compliquée, mais est au bout du compte plus légère pour ta machine..
Mais fais comme tu l'entends.
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
28 octobre 2011

Mais, vu la puissance des machines actuelles, sans parler celles de demain qui fort probablement flirteront avec la "philosophie" quantique, je ne pense pas que 2 petits "set" vont changer grand chose. Si tu prends un chrono, je ne pense pas qu'il y ait un milliardième de seconde de différence entre les 2 solutions... Comme on ne vit qu'une fois, faisons dans le concis et oublions les états d'âme des machines. Du reste, quand la mienne fait des siennes (pour ne pas dire déconne), cela finit toujours par un bon taquet dessus, ça me fait plaisir (c'est pas une machine qui va m'emmerder la vie !) et ça se passe toujours très bien !
En d'autres termes M. jmfO, la machine est à notre service et peu me chaut si elle est à la hauteur ou pas. L'essentiel c'est que ça passe avec élégance et concision !
Voilà comme je vois les choses, ou si tu préfères comme je les entends.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Ce n'est pas tant une question de rapidité, mais plutôt de mémoire ...

Est-ce que ceci te parait vraiment complexe, alors ?
With ActiveSheet
   .Range("NbUXParCC2a:" & .Range("NbUXParCC2a").Offset(0, 1).AddressLocal).Merge
  End With

tu n'y retrouves pourtant que ce que tu y as défini par tes deux set (tant la première plage que la seconde, obtenue par Offset) . Tu évites tes deux sets et tu définis la plage normalemernt, sans Union !

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
28 octobre 2011

Bravo, adopté !