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 : mettre une formule dans toute une colonne de la ligne Z2 à Z30


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut VBA : mettre une formule dans toute une colonne de la ligne Z2 à Z30
    Bonsoir,

    Je rencontre un pb avec VBA (2010), je souhaiterais mettre une formule dans une colonne de la ligne M2 à M30 par exemple mais mon programme VBA ne semble pas fonctionner avec cette formule. (lorsque je la raccourci elle fonctionne mais lorsqu'elle est dans son intégralité elle ne fonctionne pas (la formule fonctionne normalement dans excel, c'est à partir de là que je recopie la même formule en langage vba pour mon programme). Ci-dessous le programme, peut-être y trouverez-vous une erreur.
    Merci d'avance pour vos suggestions ou solutions.

    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
    Sub Macro12()
     
    Dim i As Variant
    For i = 2 To 100
     
    Cells(i, 27).Value = _
            "=IF(RC[-15]=0,""Livrée(s)"",IF(AND(AND(R1C52>RC[-14],RC[-13]=""""),RC[-15]=RC[-16]),""AA""&DAY(LEFT(RC[-14],10)+8)&""/""&IF(MONTH(LEFT(RC[-14],10))<10,""0""&MONTH(LEFT(RC[-14],10))&""/""&YEAR(LEFT(RC[-14],10)),MONTH(LEFT(RC[-14],10))&""/""&YEAR(LEFT(RC[-14],10))),IF(AND(AND(AND(RC[-16]<>RC[-15],RC[-15]<>0),RC[-13]=""""),R1C52>=RC[-14]),""BB ""&DAY(LEFT(RC[-14],10)+8" & _
            "IF(MONTH(LEFT(RC[-14],10))<10,""0""&MONTH(LEFT(RC[-14],10))&""/""&YEAR(LEFT(RC[-14],10)),MONTH(LEFT(RC[-14],10))&""/""&YEAR(LEFT(RC[-14],10)))&"" CC"",IF(AND(AND(AND(AND(RC[-16]=RC[-15],RC[-13]<>""""),R1C52>=RC[-13]-9),R1C52<=RC[-13]+1),RC[-11]=""""),""DD"",IF(AND(AND(AND(AND(AND(RC[-16]<>RC[-15],RC[-15]<>0),RC[-13]<>""""),R1C52>=RC[-13]-9),R1C52<=RC[-13]+1),RC[-11]" & _
            "EE"",IF(AND(AND(AND(RC[-16]=RC[-15],RC[-13]<>""""),R1C52<RC[-13]),RC[-11]=""""),""FF ""&DAY(LEFT(RC[-13],10))&""/""&IF(MONTH(LEFT(RC[-13],10))<10,""0""&MONTH(LEFT(RC[-13],10))&""/""&YEAR(LEFT(RC[-13],10)),MONTH(LEFT(RC[-13],10))&""/""&YEAR(LEFT(RC[-13],10)))&"" GG"",IF(AND(AND(AND(AND(RC[-16]<>RC[-15],RC[-15]<>0),RC[-13]<>""""),R1C52<RC[-13]),RC[-11]=""""),""HH ""&D" & _
            "C[-13],10))&""/""&IF(MONTH(LEFT(RC[-13],10))<10,""0""&MONTH(LEFT(RC[-13],10))&""/""&YEAR(LEFT(RC[-13],10)),MONTH(LEFT(RC[-13],10))&""/""&YEAR(LEFT(RC[-13],10)))&"" II"",IF(AND(AND(AND(RC[-16]=RC[-15],RC[-13]<>""""),R1C52>RC[-13]+1),RC[-11]=""""),""JJ"",IF(AND(AND(AND(AND(RC[-16]<>RC[-15],RC[-15]<>0),RC[-13]<>""""),R1C52>RC[-13]+1),RC[-11]=""""),""KK"",IF(AND(AND(AND" & _
            "16]=RC[-15],RC[-13]<>""""),R1C52>=RC[-11]-9),R1C52<=RC[-11]+1),RC[-11]<>""""),""LL"",IF(AND(AND(AND(AND(AND(RC[-16]<>RC[-15],RC[-15]<>0),RC[-13]<>""""),R1C52>=RC[-11]-9),R1C52<=RC[-11]+1),RC[-11]<>""""),""MM"",IF(AND(AND(AND(RC[-16]=RC[-15],RC[-13]<>""""),R1C52<RC[-11]),RC[-11]<>""""),""Livraison au ""&DAY(LEFT(RC[-11],10))&""/""&IF(MONTH(LEFT(RC[-11],10))<10,""0""&" & _
            "T(RC[-11],10))&""/""&YEAR(LEFT(RC[-11],10)),MONTH(LEFT(RC[-11],10))&""/""&YEAR(LEFT(RC[-11],10)))&"" NN"",IF(AND(AND(AND(AND(RC[-16]<>RC[-15],RC[-15]<>0),RC[-13]<>""""),R1C52<RC[-11]),RC[-11]<>""""),""OO""&DAY(LEFT(RC[-11],10))&""/""&IF(MONTH(LEFT(RC[-11],10))<10,""0""&MONTH(LEFT(RC[-11],10))&""/""&YEAR(LEFT(RC[-11],10)),MONTH(LEFT(RC[-11],10))&""/""&YEAR(LEFT(RC[-1" & _
            """ PP"",IF(AND(AND(AND(RC[-16]=RC[-15],RC[-13]<>""""),R1C52>RC[-11]+1),RC[-11]<>""""),""QQ"",IF(AND(AND(AND(AND(RC[-16]<>RC[-15],RC[-15]<>0),RC[-13]<>""""),R1C52>RC[-11]+1),RC[-11]<>""""),""RR"")))))))))))))))"
     
    Next i
     
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Il y a une limite dans la longueur des chaînes dans VBA

    Tiré de l'aide, l'aide, l'aide, l'aide, l'aide, l'aide, l'aide, l'aide, l'aide, l'aide, l'aide, de VBA Office 2010


    String, type de données
    Type de données composé d'une séquence de caractères contigus interprétés en tant que caractères et non en tant que valeurs numériques. Une donnée de type String peut inclure lettres, nombres, espaces et signes de ponctuation. Le type de données String peut stocker des chaînes de longueur fixe dont la longueur est comprise entre 0 et environ 63 Ko de caractères et des chaînes dynamiques dont la longueur est comprise entre 0 et environ 2 milliards de caractères. Dans Visual Basic, le signe dollar ($) est le caractère de déclaration du type String.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, il existe des limites suivant les versions d'Excel, longueur du contenu des formules : Excel 2003 (1024), Excel 2007+ (8192). Ce qui ne devrait pas être le cas ici ( sauf si en mode compatibilité ), pour la syntaxe : ce genre de formules m'ébouriffe .... quand en plus Le code n'est pas balisé

  4. #4
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour a tous

    Et puis de toute façon on est limité a 7 si imbriqués dans les formules et là c'est Beauuuuucoup plus !!!!

    pour moi ça peut pas marcher

    A+

    Bon la prochaine fois je verifierai avant de poster une betise

    en 2010 on n'est plus limité a 7 si imbriqués (je viens de tester)

    Désolé, mea coulpa, mea maxima coulpa


    ceci dit tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Cells(i, 27).Value = ...
    'pourquoi tu fais pas un 
    Cells(i, 27).Formula= ...
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si ça fonctionne quand tu l'écris directement dans Excel ... tu pourrais nous montrer à quoi elle ressemble quand "elle fonctionne" ?

    car une fonction "imbuvable", écrite en anglais (VBA oblige) et qui ne fonctionne pas ... ça nous oblige à la décortiquer complètement pour la reconstruire

    en la collant dans Excel ... on peut déjà mieux la manipuler et l'appréhender !

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par kiki29 Voir le message
    Salut, il existe des limites suivant les versions d'Excel, longueur du contenu des formules : Excel 2003 (1024), Excel 2007+ (8192). Ce qui ne devrait pas être le cas ici ( sauf si en mode compatibilité )
    Là, je ne suis pas aussi affirmatif. Il mentionne que sa formule directement écrite dans une cellule "entre" complètement dans la cellule, donc pour ceci je te suis complètement.

    Mais là, il doit affronter, comme le mentionne mon extrait de l'aide de VBA Excel 2010 une limite de VBA (environ 63 à 64 kilo-octets de chaînes de caractères de longueur fixe) avant de subir la limitation d'Excel de 8192 caractères.

    Et puis, en relisant sa question; pour 30 cellules, ce n'est pas bien compliqué de l'écrire à la mitaine dans la cellule (avec les $, si nécessaire), et de recopier vers le bas.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut Faire fonctionner un programme avec des conditions et pour plusieurs lignes
    Bonjour et merci pour vos réponses et vos commentaires très constructifs.
    J'ai renoncé à écrire la formule intégrale dans VBA pour les raisons que vous avez évoquées.
    Par contre, j'aimerais décortiquer l'ensemble de la formule avec des conditions ce qui me permettrais de ne pas surcharger la cellule (enfin si je ne me trompe pas).
    J'ai donc essayé le code VBA ci-dessous pour 2 morceaux de cette formule mais hélas il ne fonctionne que pour la première ligne et non la seconde lorsqu'elle est vrai. De plus, je souhaiterais qu'il fasse l'analyse pour chacune des ligne de mon tableau.
    Pourriez-vous me dire pourquoi ce programme ne fonctionne pas correctement svp ?
    Merci d'avance pour vos réponses.

    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
    30
    31
    Sub Macro1202()
     
    NUMLIGN = Range("H" & Rows.Count).End(xlUp).Row
    Dim i As Variant
    For i = 2 To NUMLIGN
     
    Range("AB" & i).Formula = _
                "=IF(M" & i & "=0,""OK"")"
    If Range("AB" & i).Formula = _
                "=IF(M" & i & "=0,""OK"")" = True Then
     
                Range("AB" & i).Formula = _
                "=IF(M" & i & "=0,""OK"")"
     
                Else
     
    Range("AB" & i).Formula = _
                "=IF(and(and(and(and(L" & i & "=M" & i & ",O" & i & "<>""""),$AZ$1>=O" & i & "-7),$AZ$1<=O" & i & "+3),Q" & i & "=""""),""A CONFIRMER"")"
     
    If Range("AB" & i).Formula = _
                "=IF(and(and(and(and(L" & i & "=M" & i & ",O" & i & "<>""""),$AZ$1>=O" & i & "-7),$AZ$1<=O" & i & "+3),Q" & i & "=""""),""A CONFIRMER"")" = True Then
     
                Range("AB" & i).Formula = _
                "=IF(and(and(and(and(L" & i & "=M" & i & ",O" & i & "<>""""),$AZ$1>=O" & i & "-7),$AZ$1<=O" & i & "+3),Q" & i & "=""""),""A CONFIRMER"")"
     
                Else
     
    End If
    End If
    Next i
    End Sub

  8. #8
    Membre actif
    Homme Profil pro
    Enthousiaste Excel
    Inscrit en
    Avril 2015
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enthousiaste Excel

    Informations forums :
    Inscription : Avril 2015
    Messages : 155
    Points : 242
    Points
    242
    Par défaut
    Je ne comprends pas le raisonnement de la macro. ca m'a l'air de prendre un chemin très tarabiscoté. Tu ferais mieux de nous dire ce que tu veux obtenir

    Mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=IF(M" & i & "=0,""OK"")"
    ne peut renvoyer que FALSE ou "OK", jamais true

    contrairement à
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=IF(M" & i & "=0,true,false)"
    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Range("AB" & i).Formula = _
    "=IF(M" & i & "=0,""OK"")" = True Then
    est VRAIMENT bizarre


    ca serait pas mieux de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Range("AB" & i) = True Then
    ???


    Enfin, je ne comprends pas ce que fais ta formule "fait"

Discussions similaires

  1. Inserer une formule pour toutes les colonnes vides
    Par sakhob dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/09/2014, 20h26
  2. Réponses: 2
    Dernier message: 19/03/2014, 14h47
  3. Remplacer une chaine dans toute une bdd
    Par aiphes dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/07/2011, 13h25
  4. comment afficher une cellule qui contient une formule, dans textbox
    Par cali59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/08/2009, 00h07
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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