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 :

Fonction SI avec plusieurs arguments transposable en VBA


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
    Responsable Commercial
    Inscrit en
    Mars 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Commercial
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 51
    Par défaut Fonction SI avec plusieurs arguments transposable en VBA
    Bonjour, je vais devoir trouver une macro (à insérer dans un module général) pour effectuer cette opération qui semble compliquée pour moi, débutant en VBA :

    Dans mon tableau, à chaque fois qu'une cellule de ma plage K3:K2000 contient soit la valeur "GR", soit la valeur "GE", alors je dois inscrire la valeur "NON" sur la même ligne, dans les colonnes 45 à 105 : toutes les 5 colonnes de la 45 à la 105 incluses (45 To 105 Step 5).
    Sinon (si ce n'est pas l'une des 2 valeurs "GE" ou "GR"), alors il ne doit rien être inscrit dans les colonnes 45, 50, 55 ..., 105.

    Avec la fonction IF, je ne connais pas la syntaxe pour conditionner avec les 2 valeurs "GR" ou "GE"...
    Quelqu'un peut-il m'aider à rédiger ce code SVP ?

    D'avance merci.
    Cdt

  2. #2
    Membre très actif Avatar de XLRATOR
    Homme Profil pro
    Comptable Analyste
    Inscrit en
    Août 2012
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Comptable Analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 226
    Par défaut
    Bonsoir ou Bonjour tout dépend de vous,
    Essayez avec la syntaxe qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub AfficherEtat()
    Dim rng As Range, i As Integer, SpecCell As Range
    Set SpecCell = Range("K3:K2000").SpecialCells(xlCellTypeConstants) ' Remplacez SpecialCells(xlCellTypeConstants)par SpecialCells(xlCellTypeFormulas)si les cellules de la colonne K sont des formules
    Application.ScreenUpdating = False 'Arrête la mise à jour de l'affichage sur écran jusqu'à la fin de la routine, ça vous fait gagner du temps
    For i = 45 To 105 Step 5
    For Each rng In SpecCell.Cells
    If rng.Value = "GR" Or rng.Value = "GE" Then
    Cells(rng.Row, i).Value = "Non"
    Else
    Cells(rng.Row, i).Value = ""
    End If
    Next
    Next
    End Sub
    Et veillez à changer SpecialCells(xlCellTypeConstants) par SpecialCells(xlCellTypeFormulas)si les cellules de la colonne K sont des formules.
    En effet, pour des raisons de performance seules les cellules dont les contenus sont des valeurs constantes / ou des formules seraient affectées par le code.

    Bonne continuation.
    Karim.
    Entre la canne à pèche et le poisson c'est certainement la canne que je choisirais, puis apprendrais à m'en servir.
    Si on vous souffle une solution au complet c'est que vous n'auriez rien compris du problème.
    Consultez la , de forte chances que votre problème y figure et c'est plus vite que de poser une question et en attendre la réponse.
    FAQ Excel: http://excel.developpez.com/faq/

  3. #3
    Membre averti
    Homme Profil pro
    Responsable Commercial
    Inscrit en
    Mars 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Commercial
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 51
    Par défaut
    Salut Karim,

    Merci pour ton code que j'ai testé.
    Le problème est que j'ai déjà d'autres valeurs que "NON" dans les colonnes 45 à 105, et qu'avec le traitement du ...Else Cells(rng.Row, i).Value = "", cela m'efface toutes les données inscrites dans ces colonnes.
    Ne peut-on pas prévoir de simplement mettre fin au traitement après Else au lieu d'inscrire "" dans les colonnes non concernées par le "NON"?
    Ou alors as-tu une autre solution pour ne pas toucher aux valeurs de ces colonnes?

    Merci d'avance.
    Cordialement.

  4. #4
    Expert éminent


    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
    Par défaut
    bonjour,

    la clause Else n'est pas obligatoire dans un "if" ... enlève la ligne Else et tout le code entre Else et Endif..

  5. #5
    Membre très actif Avatar de XLRATOR
    Homme Profil pro
    Comptable Analyste
    Inscrit en
    Août 2012
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Comptable Analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 226
    Par défaut
    Bonjour janigrel,

    Ne peut-on pas prévoir de simplement mettre fin au traitement après Else au lieu d'inscrire "" dans les colonnes non concernées par le "NON"?
    Bien évidement, il suffit d'omettre les lignes 9 et 10 du code.

    Bon courage.
    Karim
    Entre la canne à pèche et le poisson c'est certainement la canne que je choisirais, puis apprendrais à m'en servir.
    Si on vous souffle une solution au complet c'est que vous n'auriez rien compris du problème.
    Consultez la , de forte chances que votre problème y figure et c'est plus vite que de poser une question et en attendre la réponse.
    FAQ Excel: http://excel.developpez.com/faq/

  6. #6
    Membre averti
    Homme Profil pro
    Responsable Commercial
    Inscrit en
    Mars 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Commercial
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 51
    Par défaut
    Merci à tous, le résultat est OK.

    Je dois à présent résoudre une autre contrainte liée à un code inscrit sur ma feuille, et qui colore les lignes en fonction de certaines valeurs, et que les "NON" qui viennent d'être reportés viennent en perturber le bon fonctionnement...
    La discussion ouverte sur ce sujet est visible ici => http://www.developpez.net/forums/d14...s/#post7746394

    A bientôt peut-être et merci pour votre précieuse aide.

    Cordialement.

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

Discussions similaires

  1. [Prototype] Ajax.Request et onSuccess : appel de fonction avec plusieurs arguments
    Par gregbond dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 18/10/2012, 17h00
  2. [XL-2003] Fonction 'like' avec plusieurs arguments
    Par bdoux33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/05/2009, 14h44
  3. Est-il possible d'utiliser la fonction TOP avec un argument variable ?
    Par 16-Marco dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 06/03/2007, 22h21
  4. callback avec plusieurs arguments
    Par Claiw dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/12/2006, 18h46
  5. switch avec plusieurs arguments
    Par lazzeroni dans le forum Langage
    Réponses: 4
    Dernier message: 18/07/2006, 13h34

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