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 :

Modification via userform, vide ou imposer format nombre [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Modification via userform, vide ou imposer format nombre
    Bonjour,

    Je voudrais effectuer des corrections dans une BD via un userform. Le code ci-dessous fonctionne bien si j'insère des nombres.
    Il s'agit de paramètres électriques, donc lors de la saisie et l'archivage des erreurs ont été commises.
    En effet, le relevé n'ayant pas été effectué, je voudrais vider les cellules correspondantes dans la BD.
    Pour cela, je vide les valeurs des 2 textboxs (TextBox1 et TextBox2) mais mon code plante sur la ligne du "IF".
    Je suis vraiment bloqué. Je vous remercie pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Cmd_Valider_Click()
    Set f = Sheets("BD")
     
    For Each c In f.Range("C2:C" & f.[C1048576].End(xlUp).Row)
    If c = CDate(Txt_Date) And c.Offset(0, 15) = Txt_cmdp And c.Offset(0, 16) = Txt_Poste _
    Then c.Offset(0, 17) = CDbl(TextBox1): c.Offset(0, 18) = CDbl(TextBox2)
    Next
     
    Unload Me
     
    MsgBox "Paramètres Corrigés!", vbInformation
    End Sub
    Cordialement,

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour cathodique; le Forum

    D'abord il faudrait mettre CDate pour les 3 comparaisons dans ta ligne IF.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If c = CDate(Txt_Date) And c.Offset(0, 15) = CDate(Txt_cmdp) And c.Offset(0, 16) = CDate(Txt_Poste)
    Cordialement

    Docmarti.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Docmarti,

    je te remercie beaucoup pour ton retour.
    D'abord il faudrait mettre CDate pour les 3 comparaisons dans ta ligne IF.
    If c = CDate(Txt_Date) And c.Offset(0, 15) = CDate(Txt_cmdp) And c.Offset(0, 16) = CDate(Txt_Poste)
    c.Offset(0, 15) ne contient pas une date mais contient du texte (référence du type de relevé)
    c.Offset(0, 16) ne contient pas une date mais valeur Alphanumérique (référence du poste)

    Je voudrais mettre des condition sur textBox1 et textBox2, si textboxs vides alors les cellules correspondantes dans la feuille BD seront vidées
    et si textboxs contiennent du numérique alors les cellules correspondantes auront le même format numérique.

    Je n'ai mis qu'une partie de mon code, seulement la partie où je bloque. Cette userform est lancé à partir d'une autre userform,
    donc à son ouverture dans textbox1 et textbox2, on trouve les valeurs à modifier (vide ou numérique).

    c'est là que je bloque je n'ai su mettre la 1ère condition, si je vide les textboxs alors les cellules correspondantes dans la BD seront vidées.
    Par contre si, j’insère des valeurs ou modifie celles qui se trouvent dans les textboxs mon code fonctionne bien

    Encore merci.

    Cordialement,

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour cathodique;

    Ca peut ressembler à ceci :

    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
    Private Sub Cmd_Valider_Click()
    Set f = Sheets("BD")
     
    For Each c In f.Range("C2:C" & f.Range("C" & Rows.Count).End(xlUp).Row)
     
    If c = CDate(Txt_Date) Then 'La premiere condition est verifiee, on peut verifier les 2 autres conditions
     ok2 = False
     ok3 = False
     valeur2 = ""
     valeur3 = ""
     
     If Trim(Txt_cmdp) = "" Then ok2 = True
     If ok2 = False And c.Offset(0, 15) = Txt_cmdp Then ok2 = True: valeur2 = Txt_cmdp 'Valeur de type String
     
     If Trim(Txt_Poste) = "" Then ok3 = True
     If ok3 = False Then
     If c.Offset(0, 16) = CDbl(Txt_Poste) Then ok3 = True: valeur3 = CDbl(Txt_Poste)  'Convertir en valeur de type numerique
     End If
     'Si tu veux que les 2 conditions donnent la valeur TRUE pour faire des modifications, c'est comme ce qui suit :
     If ok2 = True And ok3 = True Then
      c.Offset(0, 17) = valeur2: c.Offset(0, 18) = valeur3
     End If
    End If
     
    Next
     
    Unload Me
     
    MsgBox "Paramètres Corrigés!", vbInformation
    End Sub
    Cordialement

    Docmarti.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir Docmarti,

    Merci pour ton code mais à première vue ça ne résoudra pas mon problème, car le test doit ce faire sur textbox1 et textbox2. Je vais tout de même faire un test.

    Je prends un peu de temps pour monter un fichier qui illustre mon problème, je pense que c'est la meilleur solution. Tu comprendras mieux mon souci.

    à tantôt.

    Cordialement,

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par cathodique Voir le message

    Merci pour ton code mais à première vue ça ne résoudra pas mon problème, car le test doit ce faire sur textbox1 et textbox2. Je vais tout de même faire un test.

    ,
    Ce test se fait sur TextBox1 et Texbox2. Les 2 conditions doivent être remplies.
    Cordialement

    Docmarti.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir Docmarti,

    Merci beaucoup pour ton aide, mais ton code n'a pas résolu mon problème.

    Tu m'avais dit qu'il faisait les testes sur textBox1 et Textbox2 alors que je ne les vois pas dans ton code.

    J'ai peut-être mal exposé mon problème. Merci quand même pour ton aide, c'est très sympa de ta part.

    J'ai résolu mon souci ainsi
    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
    Private Sub Cmd_Valider_Click()
    Application.ScreenUpdating = False
     
    For Each c In f.Range("C2:C" & f.[C1048576].End(xlUp).Row)
     
    If Me.TextBox1 <> "" And Me.TextBox2 <> "" Then
    If c = CDate(Txt_Date) And c.Offset(0, 15) = Txt_cmdp And c.Offset(0, 16) = Txt_Poste Then _
    c.Offset(0, 17) = CDbl(TextBox1): c.Offset(0, 18) = CDbl(TextBox2)
    Else
    If c = CDate(Txt_Date) And c.Offset(0, 15) = Txt_cmdp And c.Offset(0, 16) = Txt_Poste Then _
    c.Offset(0, 17) = "": c.Offset(0, 18) = ""
    End If
    Next
     
    Application.ScreenUpdating = True 'affiche les raffraîchissements d'écran
    Unload Me 'vide et ferme l'UserForm
     
    MsgBox "Paramètres Poste Corrigé!", vbInformation
    End Sub
    Bonne soirée.

    Cordialement,

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonsoir cathodique;

    Effectivement je ne l'avais pas du tout compris comme ça.

    Tu as trouvé la solution. Super.

    J'ai testé ta solution.

    Je crois qu'il va y avoir un problème avec la comparaison de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.Offset(0, 16) = Txt_Poste
    vu qu'un des éléments est numérique et l'autre String.

    Au plaisir
    Cordialement

    Docmarti.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour Docmarti,

    je te remercie pour ton retour. J'espère ne pas avoir de problème de comparaison comme tu me le soulignes, car j'ai pas mal "bavé" avec ce fichier.

    Pour Txt_Poste, les données sont de ce genre:T01, Te05, s28, est-ce que tu penses vraiment que je pourrai avoir un problème de comparaison?

    Merci encore pour tout.

    Cordialement,

  10. #10
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par cathodique Voir le message
    Pour Txt_Poste, les données sont de ce genre:T01, Te05, s28, est-ce que tu penses vraiment que je pourrai avoir un problème de comparaison?
    Non. Je pensais que le format de ces cellules était numérique. Donc on compare une valeur String avec une valeur String.

    Ca pourrait être fait comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CDate(c) = CDate(Trim(Txt_Date)) And UCase(Trim(CStr(c.Offset(0, 15)))) = UCase(Trim(Txt_cmdp)) And UCase(Trim(CStr(c.Offset(0, 16)))) = UCase(Trim(Txt_Poste)) Then
    Cordialement

    Docmarti.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re Docmarti,

    Je te remercie beaucoup pour ton aide. Tu me soulages des corvées de recherches car je ne maitrise pas bien le VBA. C'est très gentil de ta part.

    Cordialement,

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

Discussions similaires

  1. [XL-2010] Problème format de cellule après modification via userform
    Par r9titi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/02/2012, 14h34
  2. Modification et suppression dynamique de liste de données via userform
    Par raf75002 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/03/2011, 14h43
  3. [PR-2007] Suivi des modifications sur une tâche via userform
    Par metmtl dans le forum VBA Project
    Réponses: 0
    Dernier message: 03/03/2010, 11h01
  4. [XL-2003] Modification valeurs base de données via userform
    Par Kimaos dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/05/2009, 05h29
  5. Modif format nombre pour 24 TextBox
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2007, 21h26

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