VBA excel - Problème

Résolu/Fermé
Calvin - 11 févr. 2009 à 21:06
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 17 févr. 2009 à 12:09
Bonjour,

Je suis novice en programmation vba et je ne me sors pas du problème suivant :
Je dois créer un formulaire de saisie très simple : 3 zones de textes dans ce formulaire qui vont alimenter les 3 premières colonnes d'une feuille excel... et cela jusqu'a ce que les donnée présentes dans la quatrième colonne de la feuille soient vides. la boucle de remplissage s'arrête donc dès que la cellule D100 (par exemple) n'est plus renseignée...


Voici mon code et pardon par avance pour le niveau mais je rame.... Merci à vous de m'éclairer.

Sub cmdvalider_Click()
If boitannee = "" Then
MsgBox "Vous devez entrer une année."
boitannee.SetFocus
Exit Sub
End If
If boitmois = "" Then
MsgBox "Vous devez entrer un mois."
boitmois.SetFocus
Exit Sub
End If
If boitcode = "" Then
MsgBox "Vous devez entrer un code."
boitcode.SetFocus
Exit Sub
End If
finboucle = 0
ligne = 0
While finboucle = 0
ligne = ligne + 1
If (Lastrow.Offset(ligne, 3).Value <> "") Then
Lastrow.Offset(ligne, 0).Value = boitannee
Lastrow.Offset(ligne, 1).Value = boitmois
Lastrow.Offset(ligne, 1).Value = boitcode
Else
finboucle = 1
End If
Wend
End Sub
A voir également:

3 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 644
11 févr. 2009 à 22:30
Bonsoir,

Voilà un code qui devrait fonctionner :

Sub cmdvalider_Click()
    If boitannee = "" Then
        MsgBox "Vous devez entrer une année."
        boitannee.SetFocus
        Exit Sub
    End If
    If boitmois = "" Then
        MsgBox "Vous devez entrer un mois."
        boitmois.SetFocus
        Exit Sub
    End If
    If boitcode = "" Then
        MsgBox "Vous devez entrer un code."
        boitcode.SetFocus
        Exit Sub
    End If
    ligne = 1
    finboucle=0
    While finboucle <> 1
        If (Cells(ligne, 4).Value <> "") Then
            ligne = ligne + 1
        Else
            Cells(ligne, 1).Value = boitannee
            Cells(ligne, 2).Value = boitmois
            Cells(ligne, 3).Value = boitcode
            finboucle = 1
        End If
    Wend
End Sub


A+
0
Bonsoir Pilas31,

Merci beaucoup pour le code. En bidouillant un tout petit peu c'est tout à fait ça. Encore merci pour ta précieuse aide.

Voici le code à présent :

Sub cmdvalider_Click()
If boitannee = "" Then
MsgBox "Vous devez entrer une année."
boitannee.SetFocus
Exit Sub
End If
If boitmois = "" Then
MsgBox "Vous devez entrer un mois."
boitmois.SetFocus
Exit Sub
End If
If boitcode = "" Then
MsgBox "Vous devez entrer un code."
boitcode.SetFocus
Exit Sub
End If
ligne = 1
finboucle = 0
While finboucle <> 1
ligne = ligne + 1
If (Cells(ligne, 4).Value <> "") Then
Cells(ligne, 1).Value = boitannee
Cells(ligne, 2).Value = boitmois
Cells(ligne, 3).Value = boitcode
Else
finboucle = 1
End If
Wend
End Sub
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 644 > Calvin
12 févr. 2009 à 00:10
Oui,

J'avais mal compris la condition sur la colonne D. Donc tu as bien rectifié.
Heureux d'avoir pu t'aider.

Bonne continuation...
0
Bonjour,

Voilà, c'est sans doute relativement simple mais je débute et je ne m'en sors pas.
A partir du code suivant, les valeurs présentes dans ma colonne E doivent commencer par "0" si elles sont inférieures à 10. Les autres restent sur 2 chiffres. Dès que la cellule est vide, fin de la boucle....J'introduis donc une boucle mais cela ne fonctionne pas.
Ainsi 2 doit devenir 02, etc... Je ne passe pas par un format de cellule personnalisé car je dois récupérer les valeurs sur 2 chiffres. Ce n'est donc pas qu'un affichage apparent..

Voici la partie de code en question :

ligne = 1
finboucle = 0
Columns("E:E").Select
Selection.NumberFormat = "@"
While finboucle <> 1
ligne = ligne + 1
If (Cells(ligne, 5).Value < 10) Then
Cells(ligne, 5).Value = "0" + Cells(ligne, 5).Value
End If
If Cells(ligne, 5).Value = "" Then
finboucle = 1
End If
Wend

Un grand merci par avance pour votre aide précieuse.
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 644
17 févr. 2009 à 10:34
Bonjour,

Je n'ai pas bien compris pourquoi tu ne veux pas utiliser le format personnalisé car en utilisant le format "00" même en VBA grâce à l'instruction :
    Columns("E:E").Select
    Selection.NumberFormat = "00"


Tu obtiens bien ce que tu souhaites et tu peux même faire des calculs qui continuent à fonctionner correctement.

Peux tu me préciser ce point.

A+
0
Bonjour Pilas,

Et bien en fait il se trouve une application qui en aval de mon fichier récupère les données, et je ne sais pour quelle raison, si je mets au format personnalisé "00" elle ne reconnaît pas le "0" supplémentaire. Il ne semble s'agir que d'un affichage. J'ai plus besoin en fait d'une concaténation.

Bonne journée et @ +
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 644
17 févr. 2009 à 12:09
Re

Ok, je comprends mieux. Dans ce cas, je te propose de modifier légérement ton code initial en utilisant la concaténation, voilà le code modifié :
Columns("E:E").Select
Selection.NumberFormat = "@"
Selection.HorizontalAlignment = xlRight 'justification à droite du texte
ligne = 2
While Cells(ligne, 5) <> 0
    If Cells(ligne, 5).Value < 10 And Mid(Cells(ligne, 5), 1, 1) <> "0" Then        
        Cells(ligne, 5).Value = "0" & Cells(ligne, 5).Value
    End If
    ligne = ligne + 1
Wend

Dis moi si cela te convient

A+
0