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

Messages postés
24
Date d'inscription
mardi 3 mars 2009
Dernière intervention
28 octobre 2011
- - Dernière réponse : Dilueur
Messages postés
24
Date d'inscription
mardi 3 mars 2009
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.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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.

Merci ucfoutu 3

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

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Dernière intervention
28 octobre 2011
0
Merci
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.
Commenter la réponse de Dilueur
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
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)
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
0
Merci
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.
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
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Dernière intervention
28 octobre 2011
0
Merci
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.
Commenter la réponse de Dilueur
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
5 avril 2013
0
Merci
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.
Commenter la réponse de jmf0
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Dernière intervention
28 octobre 2011
0
Merci
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.
Commenter la réponse de Dilueur
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Dernière intervention
28 octobre 2011
0
Merci
Bravo, adopté !
Commenter la réponse de Dilueur

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.