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 :

Aide pour écrire une formule en VBA Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Aide pour écrire une formule en VBA Excel
    Bonjour à tous,

    Je souhaite insérer cette formule dans mon tableau Excel. Celle-ci doit-être fonctionnelle uniquement toutes les 4 colonnes à partir de J4 et sur toutes les lignes de ces colonnes. La 1ère colone de mon tableau est en A4.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SI(I4="";"";MOIS.DECALER(I4;$H$2))
    J'ai commencé ça, mais je ne sais pas écrire cette formule en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For Each c In Range([A4], Cells(Rows.Count, 1).End(xlUp))
            For i = 10 To 66 Step 4
                If Cells(c.Row, i - 1) = "" Then
                'ici rien ne se passe
                Else
                Cells(c.Row, i).Formula = "" 'ici ma formule
                    End If
                    Next i
                Next c
    Merci par avance pour votre aide
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Dans ton cas, j'utiliserais un copier/coller, comme cela les références se mettront à jour sans se casser la tete
    Jérôme

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Pour le moment c'est ce que j'ai fait, mais cela ralenti considérablement le calcul de la feuille, c'est pour cette raison que je souhaitais inclure cette formule dans une macro VBA.

    Merci toutefois pour ta réponse

    Bonjour à tous,

    J'espère que vous avez passé un excellent weekend pascal.
    J'ai planché sur mon problème pendant 2 jours sans succès.

    Mon code concerne 11025 cellules et je suis convaincu qu'en passant par une macro Vba cela irait beaucoup plus vite.

    Pour la colonne J la base est H2, pour N la base est L2, etc..., jusqu'à la colonne BN où la base est BL2.

    Par exemple pour un résultat dans les cellules de la colonne J4 à J108 la formule est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =Si(I4;"";"";MOIS.DECALER(I4;$H$2))
    Dans H2 il y a 3, donc je calcul à partir de la date en I4 quelle date nous serons dans 3 mois.

    Je pense mettre ce code dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    End Sub
    Peut-être n'est-ce pas réalisable en Vba. Merci toutefois de m'apporter votre aide.
    René

    Bonjour à tous,

    J'ai écris ce code, mais il me renvoit la date saisie dans la cellule précédente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For Each c In Range([A4], Cells(Rows.Count, 1).End(xlUp))
            For i = 10 To 66 Step 4
                If Cells(c.Row, i - 1) = "" Then
                'ici rien ne se passe
                Else
                Cells(c.Row, i).Formula = (Cells(c.Row, i - 1) + (H2 * 30)) 'ici ma formule
                    End If
                    Next i
                Next c
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  4. #4
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    Placer en A1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=IF(R[3]C[8]="""","""",EDATE(R[3]C[8],R2C8))"
    est la transcription de
    =SI(I4="";"";MOIS.DECALER(I4;$H$2))
    R[3]C[8] correspondant a un offset par rapport a la cellule A1.

    J'aurai plutôt ecrit comme cela ton code, afin d'eviter le else et le end if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each c In Range([A4], Cells(Rows.Count, 1).End(xlUp))
            For i = 10 To 66 Step 4
                If Cells(c.Row, i - 1) <> "" Then Cells(c.Row, i).Formular1c1 = = "=IF(R[3]C[8]="""","""",EDATE(R[3]C[8],R2C8))
                    Next i
                Next c

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour et merci,

    J'ai fait comme tu me l'as indiqué, ça marche pour ma première colonne, mais la formule doit être faite pour être uilisée toutes les 4 colonnes, en commençant par la colonne H et se terminant par la colonne BL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each c In Range([A4], Cells(Rows.Count, 1).End(xlUp))
            For i = 10 To 66 Step 4
                If Cells(c.Row, i - 1) <> "" Then Cells(c.Row, i).FormulaR1C1 = "=IF(RC[-1]="""","""",EDATE(RC[-1],R2C8))"
                    Next i
                Next c
    Mais j'ai peur que tout ces codes ne ralentissent encore plus le calcul.
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  6. #6
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Comme c'est lundi, tu peux m'envoyer juste la premiere ligne pour m'eclaircir l'esprit. Ensuite on peut codifier le resultat a obtenir sans coller une formule sur la feuille.

    Quelle sont les format de cellule apliquer en h2, i4,j4. Si j'ai bien compris, tu veux ajouter H2 a la date se trouvant en I4 dans H4.


    Après réflexion, je me suis réuni et on en as débattu pour arriver à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each c In Range([A4], Cells(Rows.Count, 1).End(xlUp))
            For i = 10 To 66 Step 4
                If Cells(c.Row, i - 1) <> "" Then Cells(c.Row, i).FormulaR1C1 = "=IF(RC[-1]="""","""",EDATE(RC[-1],R2C" & i - 2 & "))"
            Next i
    Next c
    OU alors sans verifié que I est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub devellopêz()
    Dim c As Range
    num = Range("A65000").End(xlUp).Row
    For i = 10 To 66 Step 4
         Range(Cells(4, i), Cells(num, i)).FormulaR1C1 = "=IF(RC[-1]="""","""",EDATE(RC[-1],R2C" & i - 2 & "))"
    Next i
    End Sub
    On copie la formule dans toutes la colonne d'un coup, cela devrait accélerer le traitement

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Donc, pour la première ligne, j'ai mis une partie du fichier en pièce jointe.

    Dans la cellule J4 il y a la formule.
    Fichiers attachés Fichiers attachés
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  8. #8
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Une MFC ne serait t-elle pas plus rapide que Couleurs ?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci pour tes réponses.

    Ha ! Oui, une Mise en Forme Conditionnelle. C'est que j'avais fait au départ, et puis je me suis dirigé vers la Macro. C'est peut-être une bêtise.

    En fait non, puisque j'ai 4 conditions à remplir et qu'Excel n'en propose que 3.
    La semaine commence difficilement pour moi aussi.
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  10. #10
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    Si tu n'as que 4 cas à gerer, la MFC est niquel.

    Le format de base + 3 MFC => 4 cas
    Cdt

    Guiiand

  11. #11
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Si cellule = "" then pas de couleur : ne compte pas
    vert :1
    rouge :1
    orange :1

    1+1+1+rien = 3 et l'on est que lundi.

  12. #12
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Re,

    Si tu joues sur la couleur de police au lieu du fond

    De base t'ecris en rouge
    Cond 1 : bleu
    Cond 2 : vert
    Cond 3: orange

    et si c'est vide, t'as rien.

    Du coup ca fait bien 4 couleurs différentes

    PS : C'est pas parce que c'est férié que le calendrier s'arrête, on est mardi
    Cdt

    Guiiand

  13. #13
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci pour vos réponses. Dans la cellule en question, il n'y a pas de texte, c'est juste une couleur de fond.

    J'ai fait les 3 MFC, il y a toujours une couleur affichée, même si la cellule ciblée est vide.

    1° condition = J4 > $A$A1 alors vert
    2° condition = J4-$A$1 >=15 alors orange
    3° condition = $A$1 >= J4 alors rouge

    Dans ce cas, la cellule est verte si J4 est vide
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  14. #14
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Re,

    j'ai fais un essai sur mon poste avec

    cond 1 : =SI(ET($A$1>=J4;J4<>"");VRAI;FAUX) => Rouge
    cond 2 : =SI(J4-$A$1>=15;VRAI;FAUX) = > Orange
    cond 3 : =SI(J4>$A$1;VRAI;FAUX) => Vert

    Avec un stop si la condition est vérifié, et ca a l'air de marcher
    Cdt

    Guiiand

  15. #15
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci beaucoup, ça fonctionne bien.
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

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

Discussions similaires

  1. Besoin d'aide pour écrire une requête
    Par Jean-Marc68 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/10/2009, 19h54
  2. [XL-2003] Aide pour erreur dans un code Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 25/05/2009, 07h48
  3. aide pour comprendre une formule mathématique
    Par roubas dans le forum Mathématiques
    Réponses: 3
    Dernier message: 22/03/2009, 12h30
  4. aide pour écrire une requete imbriquée
    Par DonKnacki dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/03/2008, 15h13
  5. Aide pour écrire une requête complexe
    Par julienbdx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/11/2005, 16h58

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