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

Résolu
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011 - 8 janv. 2010 à 20:53
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011 - 10 janv. 2010 à 15:56
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
10 janv. 2010 à 10:57
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.
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
9 janv. 2010 à 00:52
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)
0
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011
9 janv. 2010 à 02:41
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.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
9 janv. 2010 à 10:18
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
9 janv. 2010 à 12:09
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
9 janv. 2010 à 13:56
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.
0
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011
9 janv. 2010 à 18:25
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.
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
9 janv. 2010 à 18:36
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.
0
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011
10 janv. 2010 à 02:11
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
10 janv. 2010 à 09:21
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.
0
Dilueur Messages postés 24 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 28 octobre 2011
10 janv. 2010 à 15:56
Bravo, adopté !
0