Formulaire en VBA dans feuille Excel [Résolu/Fermé]

Signaler
Messages postés
279
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2020
-
Messages postés
279
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2020
-
Bonjour,

J'utilise plusieurs fichiers Excel qui ont un format bien determiné.
J'ai créé une macro qui exectute plusieurs actions sur le fichier Excel, et qui fait apparaitre une fenetre popup contenant un tout petit formulaire :
- Une action conditionnée : OUI ou NON
- Une zone de saisie

Mon probleme est que je ne sais pas exploiter ces infos une fois renseignées.
En clair j'aimerai que lorsque qu'on selectionne OUI cela supprime des données dans une collone de la feuille et que ce que l'on mette dans la zone de saisie soit collée dans toutes les lignes (contenant des infos) d'une colone ...

J'ai créé un UserForm, mis des boutons et tout mais ne sais ni quel code y mettre pour leur affecter des actions, ni comment recuperer ces dites actions dans la macro originale ...

Ps : vous aurez deviné que je suis un Noob en VBA ;)

6 réponses

Messages postés
382
Date d'inscription
vendredi 2 mars 2012
Statut
Membre
Dernière intervention
1 avril 2016
228
Malheureusment avec ces informations, je ne peux te fournir un code qui te satisferait complétement!

Par contre je peux te donner quelques informations.

Dans un premier temps je suppose que tu as un bouton valider en bas de ton formulaire! Si tu double clic dessus tu aura acces au "Sub" qui correspond a l'action quand tu clilc sur le bouton. Il va falloir y mettre les actions que tu veux ici!

Dans un premier temps, tes boucles if afin de voir si les champs de ton formulaire sont bien remplis. Imaginons que tu es mid deux TextBox dans ton formulaire :

Private Sub CommandButton1_Click()
     if TextBox1.Value <> "" AND TextBox2 <> "" Then
          .....Ton code....
          Unload Userform1
     Else
          MsgBox("Tous les champs ne sont pas remplis")
     End If
End Sub


Ensuite passons a ta question principale....
Pour utiliser les infos des tes case a cocher et zone de saisie il te suffit juste de reprendre son nom et de mettre ".value" à la fin

sheets(1).cells(1,1) = TextBox1.Value
if OptionButton.Value = False Then
...


Enfin voila, je pense que tu as compris le truc!
Ensuite pour ecrire dans excell bah il s'agit de la base de VBA

Sheets(1).Cells(1,1) = "Ce que tu veux mettre dans la case"


Sheets(1) pour dire que ce sera dans la feuille 1 de ton classeur
Cells(1,1) pour dire que ce sera dans la cellule ligne 1 colonne 1


Voila voila,
Je sais pas si je peux aider plus mais commence a coder quelque chose puis si tu as des questions vient poster ton code ici...

Ne sachant pas exactement ton souhait proprement dit, je ne peux pas t'aider plus pour le moment

Mais hésites pas ;)
Messages postés
279
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2020
37
Merci bien c'est nickel je vais essayer !

Messages postés
279
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2020
37
Bon alors ça marche deja beaucoup mieux mais pas pour tout.

En effet, lorsque que clique sur VALIDER il devrai mettre dans la colonne P a partir de la case P2 le contenu de la textbox si la case O correspondante n'est pas vide ... et non, ça n'ecrit pas... j'pige pas pourquoi !

Private Sub Annuler_Click()
    Unload UserForm1
End Sub
Private Sub ref_OpenBat_Change()
    CodeOpenBat = ref_OpenBat.Value 'Récupères la valeur dans ta variable
End Sub
Private Sub suppr_NON_Click()

End Sub
Private Sub suppr_OUI_Click()

End Sub
Private Sub Valider_Click()
    Sheets("Arbo").Select
    
    'Supression des departements
    If suppr_OUI Then
        Sheets("Arbo").Select
            Columns("D:D").Select
            Application.CutCopyMode = False
            Selection.ClearContents
            Range("D1").Select
            ActiveCell.FormulaR1C1 = "DEPARTEMENT"
            With ActiveCell.Characters(Start:=1, Length:=12).Font
                .Name = "Calibri"
                .FontStyle = "Gras"
                .Size = 8
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = 3
            End With
        End If
        
        'inscription du CodeOpenBat
        For i = 2 To 1000
            If Range("O" & i).Value = "" Then
            Else
                Range("P" & i).Value = CodeOpenBat
            End If
        Next i
        
    'exit du popup
    Unload UserForm1
End Sub



Messages postés
279
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2020
37
C'est bon j'ai trouvé, c'etait la variable CodeOpenBat qui n'etait pas declarée !
Messages postés
382
Date d'inscription
vendredi 2 mars 2012
Statut
Membre
Dernière intervention
1 avril 2016
228
Pour info tu as du déclarer "CodeOpenBat" en variable global dans ton cas de figure...
C'est cool ça marche, car il s'agit d'un petit programme.

En gros, il faut eviter le plus possible de creer des variables globales, seulement le faire quand il n'y a pas d'autre choix!

La par exemple tu n'est pas obligé de changé ta variable "CodeOpenBat" a chaque fois que tu met un caractere dans le TextBox! tu peux juste l'initialiser quand tu clic sur valider. Et ça t'économise une variable globale :D

Nouveau code :

Private Sub Annuler_Click() 
    Unload UserForm1 
End Sub 
Private Sub ref_OpenBat_Change() 
    CodeOpenBat = ref_OpenBat.Value 'Récupères la valeur dans ta variable 
End Sub 

Private Sub Valider_Click() 
    Dim CodeOpenBat As String 

    Sheets("Arbo").Select 
     
    CodeOpenBat = ref_OpenBat.Value 'Récupères la valeur dans ta variable 

    'Supression des departements 
    If suppr_OUI Then 
        Sheets("Arbo").Select 
            Columns("D:D").Select 
            Application.CutCopyMode = False 
            Selection.ClearContents 
            Range("D1").Select 
            ActiveCell.FormulaR1C1 = "DEPARTEMENT" 
            With ActiveCell.Characters(Start:=1, Length:=12).Font 
                .Name = "Calibri" 
                .FontStyle = "Gras" 
                .Size = 8 
                .Strikethrough = False 
                .Superscript = False 
                .Subscript = False 
                .OutlineFont = False 
                .Shadow = False 
                .Underline = xlUnderlineStyleNone 
                .ColorIndex = 3 
            End With 
        End If 
         
        'inscription du CodeOpenBat 
        For i = 2 To 1000 
            If Range("O" & i).Value = "" Then 
            Else 
                Range("P" & i).Value = CodeOpenBat 
            End If 
        Next i 
         
    'exit du popup 
    Unload UserForm1 
End Sub


Bref, ce n'est qu'un détail mais c'est bien d'apprendre les bonnes manières dès le début
Messages postés
279
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2020
37
merci pour cette remarque ... le jeune padawan du VBA que je suis saura s'en souvenir ;)