Soucis Range et Cells [VBA Excel 2003]

Résolu
Thaxou Messages postés 8 Statut Membre -  
Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je suis novice en VBA et je demande votre aide s'il vous plait :)

Voilà, j'ai créé un userform ou l'utilisateur peut renseigner différentes cases (uniquement des nombres) tels que "Largeur de la pièce", "Longueur de la pièce", "Hauteur sous plafond", etc.

J'ai réussi à sortir un bout de code permettant à l'utilisateur de rentrer uniquement des valeurs numériques positives (pas que des entiers), et je me retrouve donc avec des valeurs enregistrés tels que "Valeur_Largeur_Piece", "Valeur_Longueur_Piece" "Valeur_Hauteur_Plafond", etc.

Ma question est simple, j'aimerai que, quand l'utilisateur clique sur le bouton "Ajouter", toutes les différentes valeurs soit transférés dans une cellules Excel. Par exemple, la valeur rentrée dans "Largeur de la pièce" aille dans la case A1, la valeur rentrée dans "Longueur de la pièce" dans la case A2, etc... (et éventuellement à la première ligne libre mais ça je pense pouvoir me débrouiller par la suite)

J'ai beau avoir essayé 50 solutions, mais j'ai toujours pas trouvé. Tout ce que j'arrive, c'est à rentrer uniquement la valeur 0 dans les cas A1, A2, etc (peut être que je ne prend pas la bonne valeur?). J'ai essayé avec range, cells, et tout ça, mais je n'y arrive toujours pas.

Voilà, je vous remercie de votre aide :)

P.S : Si vous voulez le fichier excel pour une meilleurs compréhension de mon soucis, je peux naturellement le fournir.

8 réponses

  1. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    Salut le forum

    Pour remplir la dernière ligne vide de la Colonne A
    Range("A" & Range("A65536").End(xlUp).Row + 1) = Me.Ta_TextBox

    Mytå
    Merci de donner suite à votre question, nous ne sommes pas des robots...
    Versions installées [MsProject 2003(FR), Excel 2003-2007(FR)]
    0
  2. Thaxou Messages postés 8 Statut Membre
     
    Salut Mytå,
    Si j'ajoute ton bout de code, la case A1 est toujours quand je clique sur ajouter. J'ai pourtant bien changer ce qui devait l'être :

    Private Sub AjouterNouvelleChambreFroide_Click()
    Dim Valeur_Epaisseur_Parois As String
    Range("D" & Range("D65536").End(xlUp).Row + 1) = Me.Valeur_Epaisseur_Parois
    End Sub


    Peut être je oublier de déclarer quelque chose? Ou tout simplement que je zappe un truc important aussi :p
    0
    1. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
       
      Re le forum

      Valeur_Epaisseur_Parois est vraiment le nom de ta TextBox ?

      Mytå
      0
    2. Thaxou Messages postés 8 Statut Membre
       
      Re,
      Pour aider à mieux comprendre, voici le code que j'ai mis dans la textbox (zone ou l'utilisateur peut taper sa valeur dans l'user form que j'ai créer) :

      Private Sub Valeur_Epaisseur_Parois_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
      
      Dim strCaractereEnCoursA As String 
      Dim booEffacerResultat As Boolean 
      
      On Error GoTo TraiterErreur 
      
      strCaractereEnCoursA = Chr(KeyAscii) 
      
      If strCaractereEnCoursA = "." Then 
      strCaractereEnCoursA = "," 
      End If 
      
      If IsNumeric(strCaractereEnCoursA) Or strCaractereEnCoursA = "," Then 
      
      If booEffacerResultat Then 
      Valeur_Epaisseur_Parois = "" 
      booEffacerResultat = False 
      End If 
      
      Valeur_Epaisseur_Parois = Valeur_Epaisseur_Parois & strCaractereEnCoursA  
      
      ElseIf KeyAscii = 8 Then 'Test si BackSpace 
      Valeur_Epaisseur_Parois = Left(Valeur_Epaisseur_Parois, 
      Len(Valeur_Epaisseur_Parois) - 1) 
      End If 
      
      KeyAscii = 0 
      Valeur_Epaisseur_Parois.SetFocus 
      Exit Sub 
      
      TraiterErreur: 
      MsgBox ("Erreur " & Error(Err.Number)) 
      End Sub


      Il y a sans doute encore des améliorations à faire mais la dedans, l'utilisateur ne peut entre que des chiffres (entiers ou non) positifs. Je me trompe sur toute la ligne ou bien? Désolé de poser des questions comme ça mais j'ai réellement du mal avec ce langage.

      Merci pour le réponses.
      0
  3. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    Re le forum

    Sans voir ton programme, je te propose ceci

    Le fichier : Thaxou.xls

    Il te suffit d'adapter à ton application

    Mytå
    0
  4. Thaxou Messages postés 8 Statut Membre
     
    Eh bien punaise, sans vouloir être grossier, je suis sur le c** là. C'est bien ce que je cherchais comme solution. Comme quoi, à vouloir me débrouiller tout seul, j'ai encore énormément à apprendre dans ce langage.

    Maintenant, il ne me reste plus que à l'ajouter à mon programme, adapter en fonction de mes besoins et le tour sera joué. Encore un gros merci à toi.

    Bonne fin de soirée.

    P.S : et en deux secondes, existe il une solution simple pour éviter que l'utilisateur puisse mettre plusieurs fois la virgule? Parce que par exemple : taper "45,546,7,575,75,5," pour un calcul de surface, ça m'aidera pas lol. Si ce n'est pas réalisable, ce n'est pas grave du tout.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    Re le forum

    Pour interdire d'avoir plus d'une virgule dans la TextBox

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    
      If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8 Or KeyAscii = 44 Or KeyAscii = 46) Then
        KeyAscii = 0 'on annule la pression sur la touche
      Else
        If KeyAscii = 46 Then KeyAscii = 44
        If (KeyAscii = 44 Or KeyAscii = 46) And InStr(TextBox1, ",") > 1 Then KeyAscii = 0
      End If
    
    End Sub
    

    Mytå
    0
  7. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    Re le forum

    Une autre façon de contourner le problème

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    If KeyAscii = 46 Then KeyAscii = 44 
    If InStr("1234567890,", Chr(KeyAscii)) = 0 _ 
        Or InStr(TextBox1.Value, ",") <> 0 _ 
            And Chr(KeyAscii) = "," Then KeyAscii = 0: Beep 
    End Sub


    Mytå
    Merci de donner suite à votre question, nous ne sommes pas des robots...
    Versions installées [MsProject 2003(FR), Excel 2003-2007(FR)]
    0
  8. Thaxou Messages postés 8 Statut Membre
     
    Je te remercie à nouveau Mytå pour ton aide.

    Afin de fignoler mon "projet", je suis en train d'essayer d'adapter directement les valeurs que l'utilisateur rentre aux tableaux que mon entreprise possède actuellement (je n'en suis pas l'auteur).

    Si par exemple, je souhaite ajouter ma valeur de la textbox en case C6 du tableau, ça je sais. Mais si la case C6 est déjà utilisée, il faudrait en fait que ma valeur soit transférer 11 cases plus bas, c'est à dire C17. Si C17 est occupée, ma valeur en C28. Etc...

    J'essaye avec l'outil Offset(1, 0), mais j'avoue avoir du mal. Peut être aurait tu une ruse pour résoudre mon problème?

    Encore un grand merci (et j'espère ne pas abuser de ta gentillesse :D)
    Thaxou
    0
  9. Thaxou Messages postés 8 Statut Membre
     
    J'ai réussi à contourner le problème. Merci à tous et surtout à Mytå qui m'a grandement aider :D

    Bonne soirée à tout le monde.
    0
    1. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
       
      Re le forum

      Bien heureux que ton problème soit solutionné.

      A une prochaine

      Mytå
      0