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 :

Probème avec strings.replace [XL-2010]


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
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 23
    Par défaut Probème avec strings.replace
    Bonjours je suis actuellement étudiant en mécanique et production et je suis en train de faire un petit module Excel pour me faciliter la vie. Malheureusement je débute tout juste et certaines fonctions me donnent du file retordre...

    En gros pour ceux qui connaissent les ajustements arbre alésage, je fais une macro qui automatise le système. C'est plus rapide et plus sûr que de se référer à 3 tableaux en même temps ^^

    Donc voila dans une colonne de mon tableau se trouve dans toute les cellules une valeur plus delta (ex: -1+D), et je souhaite remplacer le "+D" par rien ("") pour ensuite utilisé la valeur (ici -1) dans un calcul. Je suis alors tombé sur Strings.replace qui apparemment résout mon problème mais ça marche toujours pas et je viens de passer quelque heures sur la question. Voici la partie du code concerné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    If col = 18 Or col = 20 Or col = 23 Then
     
        Dim celmod As String
            celmod = Strings.Replace(Worksheets("Alesages").Cells(ligne, col), "+D", "")
     
        Dim celval As Double
            celval = Val(celmod)
            ES = celval + Worksheets("Alesages").Cells(ligne, colq)
     
    End If
    le but étant de remplacer le "+D" par rien pour ensuite ajouter la valeur de la cellule en colonne "col" a la valeur de la cellule en colonne "colq".

    Voila j'espère que vous pourez m'aider et je vous en remercie d'avance. Désolé pour le manque de clarté..

    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Peut être comme ceci ? (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If col = 18 Or col = 20 Or col = 23 Then
     
        With Worksheets("Alesages")
     
            ES = CDbl(Replace(.Cells(ligne, col), "+D", "") + .Cells(ligne, colq))
     
        End With
     
    End If
    Hervé.

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Il faudrait que tu nous montres le contenu des cellules.
    En pas à pas, que donne le contenu de ta variable après StringReplace ?
    Il peut y avoir des problèmes liés au format des cellules (numérique, texte, scientifique)?

    Pour la propreté de la programmation, il vaut mieux placer les déclarations en début de programme et indenter les instructions.

    Bonne année deux mille douce

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Bonjour,

    Peux-tu préciser où se situe ton problème : ça ne se lance pas ? ça se lance mais il y a un bug ? pas de bug mais ça ne fait pas ce que tu veux ?

    Et n'oublie pas quand tu écris du code d'utiliser la balise (en appuyant sur le # dans l'éditeur)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 23
    Par défaut
    Merci pour vos réponse, j'ai tester sa ne marche pas non plus donc voici le worksheets concerné:



    en rouge les colone 18,20 et 23.
    en vert les valeur de Delta (D).

    et voici le worksheet ou j'ai les donné entré et sortie:



    En rouge ce sont les donné d'entré, celle qui nous concerne sont les 3 première donnés.
    En vert clair j'ai la serie qui correspond a "col"
    la recherce de la ligne se fait automatiquement avec le diamètre.
    En Bleu j'ai l'endoit ou s'applique l'erreur.
    En vert l'endroit ou s'applique ma fonction, il s'agit du EI et il se calcul a partir du ES du code du mon premier poste.

    l'erreur que j'obtient est une erreur #VALEUR, toute les series marche sauf les serie K, M et N.

    Merci encore pour votre aide!

    [hide]
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    Private Sub result_Click()
     
    diam12.Text = diam1.Text & " " & class1.Text & " " & qualite1.Text
     
    diam13.Value = diam1.Text & " " & class2.Text & " " & qualite2.Text
     
    Dim col1, col2, ligne1 As Integer
     
    col1 = 2 + Val(qualite1.Text)
    col2 = 2 + Val(qualite2.Text)
    ligne1 = 5
     
    While Val(diam1.Text) < Worksheets("IT").Cells(ligne1, 1) Or Val(diam1.Text) > Worksheets("IT").Cells(ligne1, 2)
    ligne1 = ligne1 + 1
    Wend
     
    IT1.Value = Worksheets("IT").Cells(ligne1, col1)
    IT2.Value = Worksheets("IT").Cells(ligne1, col2)
     
    'ecarts alesage'
     
    Dim EI, ES As Double
    Dim col, colq, ligne As Byte
     
    'ecart inferieur'
     
    col = 3
    ligne = 6
     
    While Val(diam1.Text) < Worksheets("alesages").Cells(ligne, 1) Or Val(diam1.Text) > Worksheets("alesages").Cells(ligne, 2)
    ligne = ligne + 1
    Wend
     
    While class1.Text <> Worksheets("Alesages").Cells(4, col)
    col = col + 1
    Wend
     
    EI = Worksheets("Alesages").Cells(ligne, col)
     
    If col = 14 Then
    EI = -(Val(IT1.Text) / 2)
    End If
     
    'ecart superieur'
     
    If Val(qualite1.Text) = 3 Then
    colq = 38
    End If
     
    If Val(qualite1.Text) = 4 Then
    colq = 39
    End If
     
    If Val(qualite1.Text) = 5 Then
    colq = 40
    End If
     
    If Val(qualite1.Text) = 6 Then
    colq = 41
    End If
     
    If Val(qualite1.Text) = 7 Then
    colq = 42
    End If
     
    If Val(qualite1.Text) = 8 Then
    colq = 43
    End If
     
    If col >= 15 Then
     
    col = 15
    ligne = 6
     
    While class1.Text <> Worksheets("alesages").Cells(4, col)
    col = col + 1
    Wend
     
    While Val(diam1.Text) < Worksheets("alesages").Cells(ligne, 1) Or Val(diam1.Text) > Worksheets("alesages").Cells(ligne, 2)
    ligne = ligne + 1
    Wend
     
    If col = 15 Then
    col = 15 - 6 + Val(qualite1.Text)
    End If
     
    ES = Worksheets("Alesages").Cells(ligne, col)
     
    If col >= 26 And Val(qualite1.Text) <= 7 Then
    ES = (Worksheets("Alesages").Cells(ligne, col) + Worksheets("Alesages").Cells(ligne, colq))
    End If
     
    EI = ES - Val(IT1.Text)
     
    End If
     
    ei1.Value = EI
     
    'ecarts arbre'
     
    Dim ESa, EIa As Double
    Dim cola, lignea As Integer
     
    'ecart superieur'
     
    cola = 3
    lignea = 6
     
    While class2.Text <> Worksheets("Arbres").Cells(4, cola)
    cola = cola + 1
    Wend
     
    While Val(diam1.Text) < Worksheets("Arbres").Cells(lignea, 1) Or Val(diam1.Text) > Worksheets("arbres").Cells(lignea, 2)
    lignea = lignea + 1
    Wend
     
    ESa = Worksheets("Arbres").Cells(lignea, cola)
     
    If cola = 14 Then
    ESa = Val(IT2.Text) / 2
    End If
     
    'ecart inferieur'
     
    If cola >= 15 Then
     
    cola = 15
    lignea = 6
     
    While class2.Text <> Worksheets("Arbres").Cells(4, cola)
    cola = cola + 1
    Wend
     
    While Val(diam1.Text) < Worksheets("Arbres").Cells(lignea, 1) Or Val(diam1.Text) > Worksheets("arbres").Cells(lignea, 2)
    lignea = lignea + 1
    Wend
     
    If cola = 15 And Val(qualite2.Text) <> 5 Then
    cola = 15 - 6 + Val(qualite2.Text)
    End If
     
    If cola = 15 And Val(qualite2.Text) = 5 Then
    cola = 15
    End If
     
    If cola = 19 And Val(qualite2.Text) <= 3 Then
    cola = cola + 1
    End If
     
    EIa = Worksheets("Arbres").Cells(lignea, cola)
    ESa = EIa + Val(IT2.Text)
     
    End If
     
    es2.Value = ESa
     
    If Val(diam1.Text) > 1 Then
     
    ei2.Value = Val(es2.Text) - Val(IT2.Text)
    es1.Value = Val(ei1.Text) + Val(IT1.Text)
     
    End If
     
    jma.Value = (Val(es1.Text) - Val(ei2.Text)) / 1000
    jmi.Value = (Val(es2.Text) - Val(ei1.Text)) / 1000
     
    End Sub
    [/hide]

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Pour mieux comprendre ce qui se passe, il faudrait que tu nous dises ce qu'il y a dans Worksheets("Alesages").Cells(ligne, col) grace au débuggeur.
    Au fait, c'est normal le colq ou c'est une faute de frappe ?

    EDIT : pardon je n'avais pas relu ton premier post en entier.

    Si tu as un #VALEUR, c'est que tu as mis une formule dans la cellule. Il faudrait je pense ton code complet pour mieux t'aider.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 23
    Par défaut
    Message précédant éditer avec le code

    PS: J'ai converti toute la macro en UserForm pour donner quelque chose de sympa mais l'erreur se répète toujours avec K,M et N. C'est le code que j'ai fourni, il est plus propre

  8. #8
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Je ne vois plus de Replace dans ton nouveau code.

    Et tu devrais utiliser Option Explicit et bien typer toutes tes variables, comme ça au moins tu auras une erreur (si tu n'en as pas déjà) si à un moment il essaie de mettre du texte dans un numérique.

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

Discussions similaires

  1. String Replace avec httpd.conf
    Par Rollois dans le forum Apache
    Réponses: 5
    Dernier message: 26/08/2013, 21h19
  2. Remplacer des caractères avec la fonction string.replace
    Par chtom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/12/2008, 16h43
  3. resultat bizare avec string replace
    Par stranger dans le forum C++
    Réponses: 2
    Dernier message: 08/06/2007, 20h24
  4. [string]replace
    Par nenoeil dans le forum Langage
    Réponses: 6
    Dernier message: 12/07/2004, 11h53
  5. [Struts][logic:iterate] Probleme avec String
    Par julienOriano dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/06/2004, 09h39

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