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 Excel - Affecter un % [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    coordinatrice adv
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : coordinatrice adv
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Points : 21
    Points
    21
    Par défaut VBA Excel - Affecter un %
    Bonjour,

    débutante sur vba, si quelqu'un peut m'aider svp.
    j'ai un onglet qui s'appelle "tarifs"
    la colonne C contient le montant pour l'année 2016.
    pour 2017 je souhaiterais que l’utilisateur mette le pourcentage d'augmentation et que ça lui donne le montant 2017.
    montant année 2016 + taux de pourcentage =montant pour l'année 2017 à affecter sur l'ensemble des codes articles

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub tarifs()
    Dim Taux As Single
    Taux = InputBox("Saisir le taux de cette année selon votre barème svp")
    For Each Cellule In Selection
    Cellule.Value = Cellule.Value * (1 + Taux / 100)
    Next Cellule
    End Sub
    sachant que cela sera toujours l'année en cours pour effectuer le calcul
    mais cela me fait une erreur..
    "Erreur d'execution 1004" " Erreur définie pr l'application ou par l'objet"

    merci de votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Il est possible que cela vienne du selection si tu as rien selectionné
    C'est en creusant qu'on fait des trous

  3. #3
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Je pencherais pour une erreur sur le séparateur.

    Si tu veux un taux à virgule tu vas devoir taper 5,5 et pas 5.5.
    De plus tu devrais déclarer la variable Cellule avec Dim Cellule As Range.

    Cet ajout plus une gestion erreur sur le fait que le contenu de l'Inputbox soit numérique devrait régler ton problème.
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Il est regrettable que le message d'erreur reçu et la ligne de code concernée ne nous soient pas communiqués et qu'il nous faille en conséquence faire des "hypothèses".
    Je pencherais (mais ce n'est qu'une hypothèse, donc ) pour une saisie qui, non numérique, ne se prête pas à une opération arithmétique.
    Je suggère, en lieu et place d'une simple inputbox, l'utilisation de Application.InputBox avec son argument Type=1. cela forcera l'utilisateur à saisir un numérique.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre averti
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Points : 442
    Points
    442
    Par défaut
    Bonjour,
    Je viens d'essayer votre code tel quel et je n'ai pas d'erreurs... si je tape la virgule et pas un point il faut donc tester la réponse avant d'effectuer, avec replace par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub tarifs()
    Dim Taux As String
    Taux = InputBox("Saisir le taux de cette année selon votre barème svp")
    If InStr(Taux, ".") Then Taux = CDec(Replace(Taux, ".", ","))
     
    For Each Cellule In Selection
    Cellule.Value = Cellule.Value * (1 + Taux / 100)
    Next Cellule
    End Sub
    bonne soirée
    geogeo

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    Juste en passant, tu n'as même pas besoin de tester ‼

    Voilà, voilà !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Application.Inputbox avec le type 1 ne laissera tout simplement pas passer ce qui n'est pas reconnu comme numérique.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre à l'essai
    Femme Profil pro
    coordinatrice adv
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : coordinatrice adv
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    bonjour,

    je viens de reprendre ton code, cela ne me fait plus d'erreur mais le calcul ne se fait pas
    encore merci à vous tous.

    Citation Envoyé par geogeo70 Voir le message
    Bonjour,
    Je viens d'essayer votre code tel quel et je n'ai pas d'erreurs... si je tape la virgule et pas un point il faut donc tester la réponse avant d'effectuer, avec replace par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub tarifs()
    Dim Taux As String
    Taux = InputBox("Saisir le taux de cette année selon votre barème svp")
    If InStr(Taux, ".") Then Taux = CDec(Replace(Taux, ".", ","))
     
    For Each Cellule In Selection
    Cellule.Value = Cellule.Value * (1 + Taux / 100)
    Next Cellule
    End Sub
    bonne soirée
    geogeo
    Merci à vous tous,

    sauf que cela ne me fait plus d'erreur mais je n'ai aucun résultat,

    ma colonne c = montant année 2016
    ma colonne d = montant année 2017
    une fois que l'utilisateur aura taper son taux il faudrait que le montant apparaît en colonne d

    mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Tarifs()
    Dim Taux As Single
        Sheets("Tarifs").Activate
        Taux = InputBox("Veuillez indiquer le pourcentage d'augmentation du prix.", "Pourcentage d'augmentation du prix")
        If InStr(Taux, ".") Then Taux = CDec(Replace(Taux, ".", ","))
     
    For Each Cellule In Selection
    Cellule.Value = Cellule.Value * (1 + Taux / 100)
    Next Cellule
    End Sub

  9. #9
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    On en revient au même problème si ton Selection est vide ça ne marche pas et idem pour ton Cellule.value = Cellule.value ça n'a strictement aucun sens
    Enfin comme l'a signalé unparia utilise application.inputbox de type 1 plutôt que de faire une vérif.

    Un code plus correct mais néanmoins tapé avec les pieds en 15 secondes donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Tarifs()
    Dim Taux As Single
     
    Sheets("Tarifs").Activate
    Taux = Application.InputBox("Veuillez indiquer le pourcentage d'augmentation du prix.", "Pourcentage d'augmentation du prix", , , , , , 1)
     
    For Each Cellule In Range("A2:A" &Range("A2").End(xlDown).Row)
    Cells(Cellule.Row, Cellule.Column + 1).Value = Cellule.Value * (1 + Taux / 100)
    Next Cellule
    End Sub
    En partant du principe que ta colonne 2015 est en A et commence à la ligne 2 et que ta colonne 2016 est en colonne B sinon il faut adapter

    EDIT : et par pitié mets ton code entre balise (le # quand tu écris un message)
    C'est en creusant qu'on fait des trous

  10. #10
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub tarifs()Dim Taux As String
    While Taux = ""
    Taux = InputBox("Saisir le taux de cette année selon votre barème svp")
    If Not IsNumeric(Replace(Taux, ".", ",")) Then MsgBox "Entrez un valeur numetique": Taux = ""
    Wend
    Taux = Replace(Taux, ",", ".")
    For Each Cellule In Selection
    Cellule.Value = Cellule.Value * Evaluate("1+ (" & Chr(34) & Taux & Chr(34) & "%)")
    Next Cellule
    End Sub
    Dernière modification par Invité ; 02/11/2016 à 16h08.

  11. #11
    Membre à l'essai
    Femme Profil pro
    coordinatrice adv
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : coordinatrice adv
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Merci Beaucoup Al__22 ça fonctionne!

    Merci dysorthographie

    Par contre en fonction de l'année je voudrais qu'il se place dans la bonne colonne car d'une année à l'autre le taux va augmenter:

    année 2016=c
    année 2017=d
    année 2018=e
    année 2019=f

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Tarifs()
    Dim année As Integer
    année = InputBox("Veuillez saisir l'année en cours?")

    merci d'avance

  12. #12
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Pour faire ça il suffit d'un find voir d'un like, je te laisse aller voir :

    Explication Find
    Exemple sur le forum

    Explication Like
    Exemple sur le forum
    C'est en creusant qu'on fait des trous

  13. #13
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Set année = CreateObject("scripting.dictionary")
    année("2016")="c"
     année("2017")="d"
     année("2018")="e"
     année("2019")="f"
     
    annéecours = InputBox("Veuillez saisir l'année en cours?")
     
    Cells(10,année(annéecours))=100

  14. #14
    Membre à l'essai
    Femme Profil pro
    coordinatrice adv
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : coordinatrice adv
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Set année = CreateObject("scripting.dictionary")
    année("2016")="c"
     année("2017")="d"
     année("2018")="e"
     année("2019")="f"
     
    annéecours = InputBox("Veuillez saisir l'année en cours?")
     
    Cells(10,année(annéecours))=100
    merci de ta réponse, sauf que cela ne fonctionne pas
    il me bloque à partir de
    Set année = CreateObject("scripting.dictionary")


    voici mon code en entier:
    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
    26
    27
    28
    29
    Sub Tarifs()
     
    Dim année As Integer
        Sheets("Bareme").Select
        'saisir une année
        année = InputBox("Veuillez saisir une année comprise entre 2017 et 2023")
        If année > 2023 Then
            MsgBox ("Vous avez saisi une mauvaise année. Recommencez la saisie")
        Else
            If année < 2017 Then
                MsgBox ("Vous avez saisi une mauvaise année. Recommencez la saisie")
            Else
                If année = ("") Then
                 MsgBox ("Vous n'avez rien saisi. Recommencez la saisie")
                End If
            End If
        End If
     
     
    Dim Taux As Single
        Sheets("Bareme").Select
        'saisir un taux
        Taux = Application.InputBox("Veuillez indiquer le pourcentage d'augmentation du prix en %.", "Pourcentage d'augmentation du prix", , , , , , 1)
     
        For Each Cellule In Range("C2:C" & Range("C2").End(xlDown).Row)
        Cells(Cellule.Row, Cellule.Column + 1).Value = Cellule.Value * (1 + Taux / 100)
        Next Cellule
     
    End Sub

  15. #15
    Invité
    Invité(e)
    Par défaut
    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
     
    Dim année as object, annéecours as string
    Set année = CreateObject("scripting.dictionary")
    année("2016")="c"
     année("2017")="d"
     année("2018")="e"
     année("2019")="f"
    while annéecours=""
    annéecours = InputBox("Veuillez saisir l'année en cours?")
    If annéecours<"2016" or >"2019" thenannéecours=""
    Wend
     
    Dim Taux As Single
        Sheets("Bareme").Select
        'saisir un taux
        Taux = Application.InputBox("Veuillez indiquer le pourcentage d'augmentation du prix en %.", "Pourcentage d'augmentation du prix", , , , , , 1)
     
        For Each Cellule In Range("C2:C" & Range("C2").End(xlDown).Row)
        Cells(Cellule.Row, année(annéecours).Value = Cellule.Value * (1 + Taux / 100)
        Next Cellule

  16. #16
    Membre à l'essai
    Femme Profil pro
    coordinatrice adv
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : coordinatrice adv
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    merci d'avoir répondu...
    par contre j'ai un bugg au niveau de:
    Cells(Cellule.Row, année(annéecours)).Value = Cellule.Value * (1 + Taux / 100)

    j'arrive pas à comprendre..

  17. #17
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    J'observe déjà un nombre impair de parenthèses dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Cellule.Row, année(annéecours).Value = Cellule.Value * (1 + Taux / 100)
    Corriger.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Cellule.Row, année(annéecours)).Value = Cellule.Value * (1 + Taux / 100)
    Oui désolé!
    Dernière modification par AlainTech ; 16/11/2016 à 06h40. Motif: Suppression de la citation inutile

  19. #19
    Membre à l'essai
    Femme Profil pro
    coordinatrice adv
    Inscrit en
    Mai 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : coordinatrice adv
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2014
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    bonjour,

    je suis bloquée à ce niveau suite à ton dernier envoi dysorthographie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If annéecours<"2016" or >"2019" thenannéecours=""


    merci d'avance...

  20. #20
    Invité
    Invité(e)
    Par défaut
    bonjour,
    c'est mon téléphone qui as un écran trop petit!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If annéecours<"2016"or >"2019" then annéecours=""
    Dernière modification par AlainTech ; 16/11/2016 à 06h41. Motif: Suppression de la citation inutile

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/08/2016, 06h05
  2. [VBA-excel] Affecter une date à la première cellule pleine
    Par DVano dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/11/2006, 12h06
  3. [VBA-Excel] affecter la valeur infinie à une variable
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/09/2006, 21h37
  4. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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