Macro excel simplification d'expression

JEAN CLAUDE -  
 JEAN CLAUDE -
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
Configuration: Windows XP Internet Explorer 6.0

3 réponses

  1. le concombre nouvelanné
     
    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
    1. JEAN CLAUDE
       
      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
    2. Le concombre attardé > JEAN CLAUDE
       
      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
    3. Le concombre attardé > JEAN CLAUDE
       
      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
    4. JEAN CLAUDE > Le concombre attardé
       
      Merci,
      Ta demo m'a ouvert des portes.
      0
    5. JEAN CLAUDE > Le concombre attardé
       
      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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. tartempion
       
      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
    2. JEAN CLAUDE
       
      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
    3. JEAN CLAUDE
       
      Mille excuses, je viens de débloquer...
      0
    4. JEAN CLAUDE
       
      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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. JEAN CLAUDE
       
      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