IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] Comment appliquer une macro sur plusieurs cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 16
    Points
    16
    Par défaut [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Bonjour,

    Dans excel si je veux appliquer la macro ci dessous aux cellules A1:A12 cela me génère une erreur par contre si je mets note = range(A1") aucun problème comment faut il écrire la sélection de cellule pour que cela fonctionne sur la plage citée plus haut si je mets range ("cellA2:cellA12") cele ne fonctionne pas non plus.
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     Sub evaluation()
     
     
    Dim Note As Integer
     
    Dim Mention As String
    Note = Range("A2:A12") '----->>>>>> c'est là qu'il y a problème
    If Note = 0 Then Mention = "Nul"
    If Note >= 1 And Note < 6 Then Mention = "Moyen"
    If Note >= 6 And Note < 11 Then Mention = "Passable"
    If Note >= 11 And Note < 16 Then Mention = "Bien"
    If Note >= 16 And Note < 20 Then Mention = "Très Bien"
    If Note = 20 Then Mention = "Excellent"
    Range("B2:B12") = Mention
    End Sub

  2. #2
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    bonjour,

    Essaye ca c'est la première fois que je réponds


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub essai()
     
     
    For Each cell In Range("a2:a12")
    If cell.Value = 0 Then
    ActiveCell.Offset(0, 1) = "nul"
    ElseIf cell.Value >= 6 Then
    ActiveCell.Offset(0, 1) = "coucou"
     
     
    End If
    Next
    End Sub
    A star is dead

  3. #3
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    non ca ne marche pas désolé
    A star is dead

  4. #4
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Citation Envoyé par jeanpierreco
    Bonjour,

    Dans excel si je veux appliquer la macro ci dessous aux cellules A1:A12 cela me génère une erreur par contre si je mets note = range(A1") aucun problème comment faut il écrire la sélection de cellule pour que cela fonctionne sur la plage citée plus haut si je mets range ("cellA2:cellA12") cele ne fonctionne pas non plus.
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     Sub evaluation()
     
     
    Dim Note As Integer
     
    Dim Mention As String
    Note = Range("A2:A12") '----->>>>>> c'est là qu'il y a problème
    If Note = 0 Then Mention = "Nul"
    If Note >= 1 And Note < 6 Then Mention = "Moyen"
    If Note >= 6 And Note < 11 Then Mention = "Passable"
    If Note >= 11 And Note < 16 Then Mention = "Bien"
    If Note >= 16 And Note < 20 Then Mention = "Très Bien"
    If Note = 20 Then Mention = "Excellent"
    Range("B2:B12") = Mention
    End Sub
    C'est normal que ça ne marche pas, "Note" tu le définis comme un entier, or ce n'est pas un entier mais une plage de cellules.

    Tu peux par contre écrire un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     Sub evaluation()
     
    dim i as long
    'Dim Note As Integer
    'Dim Mention As String
    'Note = Range("A2:A12") '----->>>>>> c'est là qu'il y a problème
    for i = 2 to 12
    If cells(i,1).value = 0 Then cells(i,2).value = "Nul"
    If cells(i,1).value>= 1 And cells(i,1).value < 6 Then cells(i,2).value = "Moyen"
    If cells(i,1).value>= 6 And cells(i,1).value< 11 Then cells(i,2).value = "Passable"
    If cells(i,1).value>= 11 And cells(i,1).value< 16 Then cells(i,2).value = "Bien"
    If cells(i,1).value>= 16 And cells(i,1).value< 20 Then cells(i,2).value = "Très Bien"
    If cells(i,1).value= 20 Then cells(i,2).value = "Excellent"
    next i
    'Range("B2:B12") = Mention
    End Sub

    Il y a surement solution plus simple, mais pour un peu ressembler a ce que tu as écrit, c'est ça
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  5. #5
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    j'ai trouvé ceci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    For Each Cell In Range("a2:a12")
    If Cell.Value = 0 Then
    Cell.Offset(0, 1) = "nul"
     
    ElseIf cell.Value > 1 And cell.Value < 6 Then
    cell.Offset(0, 1) = "mal"
     
    ElseIf cell.Value >= 6 And cell.Value < 11 Then
    cell.Offset(0, 1) = "tbl"
        'etc
    End If
     
     
    Next

    ca marche mais c peut être pas le plus simple.
    A star is dead

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Evitez les If à répétition!

    Nettement plus simple et plus propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub evaluation()
      Dim C As Range
      For Each C In Range("A2:A12")
        Select Case C.Value
        Case 0
          C.Offset(0, 1) = "Nul"
        Case Is < 6
          C.Offset(0, 1) = "Moyen"
        Case Is < 11
          C.Offset(0, 1) = "Passable"
        Case Is < 16
          C.Offset(0, 1) = "Bien"
        Case Is < 20
          C.Offset(0, 1) = "Très Bien"
        Case 20
          C.Offset(0, 1) = "Excellent"
        End Select
      Next C
    End Sub
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Je peux juste une précision : Le OffSet c'est quoi ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ca doit pouvoir se traduire par "décalage"...



    Dans le cas présent, on va écrire dans la cellule qui est décalée de 1 vers la droite par rapport à la cellule c.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Ah ouais ok, merci pour la précision

    Par contre, pour ce code, "Nettement plus simple", en terme de compréhension pour un débutant, je sais pas si c'est le cas, car un débutant commencera toujours pas des If

    EN terme de propreté, oui c'est le cas

    Mais si tu regarde dans les 2 cas, il y a presque autant de lignes
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par illight
    car un débutant commencera toujours par des If
    D'où l'erreur de commencer à programmer sans avoir, au moins, pris la peine de parcourir les éléments du langage.
    Si on exclut les fonctions mathématiques et de conversion, il n'y en a pas tellement.
    Ca vaut franchement la peine de les lire au moins une fois pour savoir ce qui existe.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 344
    Points : 158
    Points
    158
    Par défaut
    perso , je verrai un truc du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    Sub evaluation()
     
     
    Dim Note As Integer
    Dim Mention As String
    Dim i As Integer
     
    For i = 2 To 12
     
    Note = Cells(i, 1).Value
    Debug.Print
     
    'Note = Range("A2:A12") '----->>>>>> c'est là qu'il y a problème
    If Note = 0 Then Mention = "Nul"
    If Note >= 1 And Note < 6 Then Mention = "Moyen"
    If Note >= 6 And Note < 11 Then Mention = "Passable"
    If Note >= 11 And Note < 16 Then Mention = "Bien"
    If Note >= 16 And Note < 20 Then Mention = "Très Bien"
    If Note = 20 Then Mention = "Excellent"
    Cells(i, 2).Value = Mention
    Next i
     
    End Sub
    essaie ca ca fonctionne

  12. #12
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut pour le fun
    Hello,

    si on veut s'amuser on peut utiliser Switch()

    ce qui fait un code très compact mais pas forcément très rapide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim toto as Range
    For each toto in Range("A2:A12")
       toto.Offset(0,1) = switch(toto=0,"Nul",toto<6, "Passable", _
          toto<11,"moyen", toto<16,"bien", _
          toto<20,"très bien",toto=20,"excellent")
    Next toto
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Si on est parti pour le fun, on peut aussi faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub evaluation()
      Dim C As Range
      Dim aEval As Variant
      aEval = Array("Nul", "Moyen", "Moyen", "Moyen", "Moyen", "Moyen", "Passable", _
                    "Passable", "Passable", "Passable", "Bien", "Bien", "Bien", "Bien", _
                    "Bien", "Bien", "Très Bien", "Très Bien", "Très Bien", "Très Bien", _
                    "Excellent")
      For Each C In Range("A2:A12")
        C.Offset(0, 1) = aEval(C.Value)
      Next C
    End Sub
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 14
    Points : 16
    Points
    16
    Par défaut [VBA-E] Comment appliquer select case à plusieurs cellules
    Bonjour,
    j'ai une macro qui est comme ceci sous excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Dim essairéussi As range
    Dim appréciation As String
    set essairéussi = Range("A1": A10").value
    Select Case essairéussi
        Case 0
            appréciation = "Nul"
        Case 1 To 5
           appréciation  = "Moyen"
        Case 6 To 10
            appréciation  = "Passable"
        Case 11 To 15
           appréciation  = "Bien"
        Case 16 To 19
          appréciation  = "Très Bien"
        Case Else
            appréciation  = "hors norme"
    End Select
    Range("B1:B10") = appréciation
    La macro ne fonctionne pas elle génère une erreur 424 objet requis à la ligne
    set essairéussi = Range("A1": A10").value
    Comment libellé cette ligne pour que cela fonctionne
    Merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    Salut

    Je pense que c'est parceque tu demandes la valeur (value) d'un plage de cellule, à mon avis tu dois parcourir la plage avec une bloucle For ... Next, et dans ta boucle tu testes la propriété value de ta cellule en cours

    Starec

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ensuite elle est censé faire quoi ta fonction ... tu as 10 valeurs à tester et un seul endroit pour la réponse..?

  17. #17
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    erreur de code sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set essairéussi = Range("A1": A10").value
    essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set essairéussi = Range("A1:A10").value
    perso, j'évite les caractères accentués dans les noms de variables ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2017, 16h55
  2. [OpenOffice][Tableur] Macro bouton, appliquer une valeur sur plusieurs cellules selectionées
    Par myz-rix dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 23/07/2011, 06h37
  3. Réponses: 1
    Dernier message: 11/02/2011, 14h14
  4. appliquer une macro a plusieurs cellules
    Par Snipy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/10/2010, 11h13
  5. Répéter une macro sur plusieurs cellules
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/03/2010, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo