Macro excel simplification d'expression

Fermé
JEAN CLAUDE - 2 janv. 2010 à 18:04
 JEAN CLAUDE - 5 janv. 2010 à 15:09
Bonjour,
Je pense qu'il doit être possible de simplifier l'extrait de macro suivant. Je me souviens de qque chose de semblable en turbo pascal, mais je sèche.

If Cells(32, 36) = "Solution1" Then
Range("F4:F28").Select
Selection.Copy
Range("M3").Select
ActiveSheet.Paste
Else
If Cells(32, 36) = "Solution2" Then
Range("G4:G28").Select
Selection.Copy
Range("M3").Select
ActiveSheet.Paste
Else
If Cells(32, 36) = "Solution3" Then
Range("H4:H28").Select
Selection.Copy
Range("M3").Select
ActiveSheet.Paste
Else
If Cells(32, 36) = "Solution4" Then
Range("I4:I28").Select
Selection.Copy
Range("M3").Select
ActiveSheet.Paste
End If
End If
End If
End If

J'aimerais que quelqu'un m'aide.
Merci
A voir également:

3 réponses

le concombre nouvelanné
2 janv. 2010 à 19:50
salut

tu pourrais effectivement utiliser un sélecteur (case, switch, select selon les langages) mais à être dans Excel, autant faire de l'Excel !
1. sélectionner F4:F28 et nommer cette sélection Solution1
2. sélectionner G4:G28 et nommer cette sélection Solution2
3. sélectionner H4:H28 et nommer cette sélection Solution3
4. sélectionner I4:I28 et nommer cette sélection Solution4
5. Modifier ton code en
Range(Cells(32, 36)).Select
Selection.Copy
Range("M3").Select
ActiveSheet.Paste
0
Bonjour et merci, mais ça ne marche pas.
Je crois que je me suis mal exprimé:
Ce que je voudrais, c'est que selon le texte de la cellule(32,36): "solution1"," solution2"," solution3"," solution4", je colle en M3 la plage (F4,F28), la (G4,G28), la (H4,H28) ou la (I4,I28).
J'espère avoir été plus clair...
Merci.
0
Le concombre attardé > JEAN CLAUDE
5 janv. 2010 à 02:21
Salut

Ça marche très bien au contraire :-)

Le nommage que j'utilise est Insertion -> Nom -> Définir
son raccourci est de taper un nom dans la "Zone Nom" au début de la barre de formule

Ça permet de nommer la plage F4:F28 en - par exemple - Solution1
Si ensuite, on utilise Range("Solution1").Select, ça revient à sélectionner la plage F4:F28
Si le mot "Solution1" se trouve en AJ32 - aka Cells(32,36) - utiliser Range(Cells(32, 36)).Select revient à utiliser Range("Solution1").Select

^ Ça, c'est de l'Excel
0
Le concombre attardé > JEAN CLAUDE
5 janv. 2010 à 02:33
Comme je suis dans un bon jour et que j'avais deux minutes devant moi, je t'ai concocté la démo http://www.cijoint.fr/cjlink.php?file=cj201001/cijBcE9hbf.xls

c'était un plaisir
0
JEAN CLAUDE > Le concombre attardé
5 janv. 2010 à 10:13
Merci,
Ta demo m'a ouvert des portes.
0
JEAN CLAUDE > Le concombre attardé
5 janv. 2010 à 11:02
Encore moi...
ça se complique dans les conditions suivantes:
la cellule(32,36) est sur la feuille1
les plages (F4:F28)...(I4,I28) sont sur la feuille2
et je veux écrire un de ces plage enM3 de la feuille1
Si tu peux...Merci.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
3 janv. 2010 à 11:03
Bonjour,
Un peu plus court ?
Sub Copie()
Dim A As String
    Select Case Cells(32, 34)
    Case "Solution1": A = "F4:F28"
    Case "Solution2": A = "G4:G28"
    Case "Solution3": A = "H4:H28"
    Case "Solution4": A = "I4:I28"
    End Select
    Range(A).Copy Range("M3")
End Sub

A+
0
Merci à toi,
Hélas, ça ne passe pas:
il m'est répondu
erreur d'execution '1004';
la méthode 'Range' de l'objet '_Global' a échoué
et la dernière ligne de la macro est surlignée de jaune.
Où est l'erreur?
0
Merci à toi,
Hélas, ça ne passe pas:
il m'est répondu
erreur d'execution '1004';
la méthode 'Range' de l'objet '_Global' a échoué
et la dernière ligne de la macro est surlignée de jaune.
Où est l'erreur?
0
Mille excuses, je viens de débloquer...
0
Encore moi...

Où est la blague si je procède comme ça:

Sheets("toto").Select
Dim A As String
Select Case Cells(32, 36)
Case "Sol1": A = Sheets("tata").Range("F4:F28")
Case "Sol2": A = Sheets("tata").Range("G4:G28")
Case "Sol3": A = Sheets("tata").Range("H4:H28")
Case "Sol4": A = Sheets("tata").Range("I4:I28")
End Select
Sheets("toto").Select
Range(A).Copy Range("M3")

C'est-à-dire que je veux écrire sur la feuille toto à partir de critères situés sur toto des plages situées sur tata...
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
3 janv. 2010 à 19:59
Evidemment que ça marche pas.. tu mélange des pommes et des automobiles .:D
Sub Copie()
Dim A As String
    Sheets("tata").Select
    Select Case Cells(32, 34)
    Case "Solution1": A = "F4:F28"
    Case "Solution2": A = "G4:G28"
    Case "Solution3": A = "H4:H28"
    Case "Solution4": A = "I4:I28"
    End Select
    Sheets("tata").Range(A).Copy sheets("toto").Range("M3")
End Sub

Quand ru met du code c'est préférable que ru l'entoure des balises Code.
Sélectionner le code et cliquer sur le bouton "Conserver la mise..." (le bouton blanc) de l'éditeur de texte.
Possible que je n'ai pas bien compris et que tu doive intervertir toto et tata
A+
Edit:
Mais en relisant le code que tu met dans ton premier poste je constate que tu teste et copie sur LA MÊME FEUILLE--
L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
Merci,
A mon tour de te donner un conseil:
Tu devrais publier ton catalogue de citations de Gide à Confusius. Il y a des gens qui sont très friands de telles informations.
Ca leur permet de les caser en toute occasion en se donnant le sentiment d'être cultivés voire spirituels… Si si, publie, ça plaiera!
0