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 :

Cherche un Code VBA avec condition [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Pensionné
    Inscrit en
    Octobre 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Pensionné

    Informations forums :
    Inscription : Octobre 2022
    Messages : 26
    Par défaut Cherche un Code VBA avec condition
    Bonjour,
    Je suis nouveau sur le site et ne suis pas certain d'être au bon endroit pour poser ma question mais je tente quand même.
    Je cherche une formule qui me permettrait, dans un tableau xls, de faire une soustraction sur base d'une condition.
    Par exemple, dans un petit tableau avec 2 colonnes (A et B) et 5 lignes de 1 à 5.
    La celulle A5 est alimentée par des données venant d'un formulaire.
    Pour calculer la valeur de la celulle B5, ma formule est la suivante: si A5 <> 0 alors B5 = A5 - A4 sinon B5 = A5 - (la valeur de la première cellule différente de 0 en remontant de A5 vers A1)

    Cela ne doit pas être très compliqué mais je ne suis pas un expert en vba et je cherche une solution depuis plusieurs jours sans trouver un code adapté.
    Merci pour votre aide,
    Bien à vous
    Philippe

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Philippe,

    Je pense qu'avec un fichier et un exemple de ce que vous voulez, il serait plus facile de comprendre 🤔

    A+

  3. #3
    Membre averti
    Homme Profil pro
    Pensionné
    Inscrit en
    Octobre 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Pensionné

    Informations forums :
    Inscription : Octobre 2022
    Messages : 26
    Par défaut Réponse à BrunoM45
    Citation Envoyé par BrunoM45 Voir le message
    Bonjour Philippe,

    Je pense qu'avec un fichier et un exemple de ce que vous voulez, il serait plus facile de comprendre 🤔

    A+
    En effet, voici un petit fichier avec qqs explications complémentaires.
    J'espère que ça peut aider à voir ce que je cherche.
    Merci
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour Philippe

    Je ne sais pas si les valeurs sont systématiquement grandissante dans ton tableau,
    si tel est le cas, voici une formule à mettre en B2, recopie vers le bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ET(ESTNUM(A1);A2<>0);A2-MAX(A$1:A1);0)
    Sinon, je ne sait pas si c'est faisable en Power Query, il faudra alors une fonction personnalisée en VBA

    A+

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 241
    Par défaut
    Hello,
    Voici une fonction personnalisée en VBA avec comme paramètre une cellule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function CalcDiff(Cellule As Range)
    Dim x As Integer
    CalcDiff = 0
    If Cellule.Value = 0 Then Exit Function
    x = -1
    Do
       If Not IsNumeric(Cellule.Offset(x, 0)) Then Exit Do
       If Cellule.Offset(x, 0).Value <> 0 Then
           CalcDiff = Cellule.Value - Cellule.Offset(x, 0)
           Exit Do
       End If
       x = x - 1
    Loop
    End Function
    Le principe :
    Si la cellule est égale à 0 on renvoie 0
    Si la cellule est différente de 0 on boucle sur les cellules au-dessus jusqu'à ce que l'on trouve une cellule dont la valeur est différente de 0 ou n'est pas numérique. Au pire on sortira de la boucle quand on atteindra la ligne de titre du tableau car les valeurs ne sont pas numériques. La valeur renvoyée est la différence entre la valeur de la cellule de départ et la première valeur non nulle trouvée dans les cellules au-dessus.


    A voir si cela fonctionne dans tous les cas de figure.


    En tout cas cela semble fonctionner avec le tableau fourni :

    Nom : CalcDiff.gif
Affichages : 254
Taille : 49,1 Ko

    Ami calmant, J.P

  6. #6
    Membre averti
    Homme Profil pro
    Pensionné
    Inscrit en
    Octobre 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Pensionné

    Informations forums :
    Inscription : Octobre 2022
    Messages : 26
    Par défaut Remerciement
    Bonjour Jurassic Pork,
    Un tout grand merci pour cette fonction magique qui fonctionne parfaitement et que j'ai pu appliquer à toutes les colonnes calculées de mon tableau.
    En fait vous avez traduit en code ce que j'avais dans ma petite tête de pensionné apprenti en VBA, c'est super.
    Je tiens également à vous remercier BrunoM45 et vous pour votre rapidité à me répondre, c'est encourageant.
    Si je peux me permettre il y 2 choses que je voudrais encore demander:
    1: Je me suis trompé concernant le résultat à obtenir pour la première ligne du tableau en cellule B2. En fait, si la cellule en (-1,0) est numérique cela signifie que je suis sur la première ligne contenant des valeurs et dans ce cas uniquement la valeur de B2 devrait être égale à la valeur de A2.
    2: Dans le cas de changement de valeur dans une des cellules existante de la colonne A, il faudrait que toutes les valeurs de la colonne B soient recalculées afin de garder un résultat correct.
    Avec la fonction actuelle, seule la cellule de la ligne sur laquelle je change la valeur de A est recalculée et ensuite les autres restent identiques.
    Est-il envisageable de recalculer l'ensemble des cellules en colonne B ?

    J'espère que mes explications sont claires.
    Merci encore,
    Bien à vous,
    Philippe

  7. #7
    Membre averti
    Homme Profil pro
    Pensionné
    Inscrit en
    Octobre 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Pensionné

    Informations forums :
    Inscription : Octobre 2022
    Messages : 26
    Par défaut Merci Bruno
    Grand merci BrunoM45,
    en effet la formule fonctionne parfaitement si les valeurs de la colonne A sont toujours croissantes.
    Malheureusement, dans mon tableau qui contient une quinzaine de colonnes et qqs centaines de lignes, il y a 2 colonnes dans lesquelles il peut y avoir de temps en temps une valeur décroissante et dans ce cas le résultat n'est pas correct.
    S'il y avait un moyen d'adapté la formule ce serait magnifique.
    Bonne journée à toi et à bientôt surement,
    Philippe

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour Philippe

    Il faudra utiliser la super fonction de Jurassik pork que je salue

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Exécution d'un code VBA avec deux conditions
    Par Nounours1 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/03/2017, 18h27
  2. numérotation en vba avec condition
    Par nrdz83 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2010, 20h06
  3. copier le code vba avec sa mise en forme
    Par gritchou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/06/2008, 09h00
  4. Code VBA avec caractère @
    Par Jacques-Henri dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/11/2007, 21h01
  5. Modifier Code VBA avec macro
    Par yadla dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/08/2007, 11h26

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