VBA Excel fonction call + userform

aurelie76 Messages postés 88 Statut Membre -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Si qq'un peut m'aider sur la fonction Call (dans VBA Excel) , voici mon problème :

je cherche à renseigner des cellules vides d'une colonne en chargeant une userform avec des optionbutton avec la fonction Call (optionbutton car je ne veux pas laisser le choix du champ à renseigner par l'opérateur). Le problème c'est que je perd toutes les valeurs de mes variables dans mon programme principal quand la fonction Call s'est déroulé. Voici mon code :

.....

lastrow = ActiveCell.Row

For R = 2 To lastrow Step 1
Cells(R, 6).Select
article = ActiveCell.Value
Sheets("feuil2").Select
Cells.Select
On Error Resume Next
Application.DisplayAlerts = False
Selection.Find(What:=article, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate

If (Err.Number > 0) Then
Call Macro1

End If

.....

Sub Macro1()

UserForm2.Show

If OptionButton1 = True Then
Range("A1").Value = article
End If
If OptionButton2 = True Then
Range("A1").Value = "R"
End If

UserForm2.Hide
Load UserForm1
UserForm1.Show
End Sub

Merci pour votre aide,

cdlt,

Aurelie
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    La "fonction" Call n'est pas en cause car tu ne lui passe aucun paramètre, ce que tu pourrais rajouter.

    Si tu veux garder des valeurs dans des variables il faut que ce soit des variables générales définies pour le projet.
    0
  2. aurelie76 Messages postés 88 Statut Membre 3
     
    bonsoir gbinforme,

    merci pour ta réponse, je suis actuellement bien bloqué, le pb c'est que je suis dans une boucle qui "balaye" toutes les cellules d'une colonne avec un for I= 1 to ....et lorsqu'il ya une cellule de vide, je veux par une fonction call, ouvrir un userform avec des cases à cocher pour forcer le choix de l'utilisateur et quand je reviens dans le programme principal je perd la valeur de I. En tout cas, un grand merci pour ton aide, je me pose la question de savoir si j'utilise une bonne démarche, peut être que je me complique inutilement ????

    bonne soirée Gbinforme

    aurelie76
    0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    quand je reviens dans le programme principal je perd la valeur de I.

    Parce que ton I n'est pas correctement défini : il faut qu'il soit défini dans un module par exemple
    Public I as Long

    Dans ce cas tu as une variable globale qui est valide sur toutes les procédures du projet
    0
  4. aurelie76 Messages postés 88 Statut Membre 3
     
    Rebonsoir Gbinforme,

    je remet le bout de code : en fait ma variable est R , je "balaye"dans la feuille 1 toutes les cellules de la colonne 6 et pour chaque cellule je cherche la valeur dans la feuille 2, si cette valeur n'est pas trouvée, j'ouvre une nouvelle procédure avec un userform et des optionbutton (pour renseigner la cellule vide) et quand je reviens dans le prog principal la valeur R n'est plus reconnue. Je ne sais pas comment définir correctement la variable R comme tu me le préconises, si tu peux m'éclairer, merci beaucoup.

    For R = 2 To lastrow Step 1
    Cells(R, 6).Select
    article = ActiveCell.Value
    Sheets("feuil2").Select
    Cells.Select
    Application.DisplayAlerts = False

    On Error Resume Next
    Selection.Find(What:=article, After:=ActiveCell, LookIn:=xlValues, LookAt _
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False).Activate
    If (Err.Number > 0) Then
    Call Macro1 ' ouverture de userform avec des optionbutton

    End If

    Application.DisplayAlerts = True
    ActiveCell.Offset(0, 2).Select
    Selection.Copy
    Sheets("feuil1").Select
    Cells(R, 23).Select
    ActiveSheet.Paste

    Next R
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Il faut qu'il soit défini en tête d'un module :
    Public R as Long
    Sub macrox
    ...
    End Sub

    Ensuite lorsque tu reviens de ton appel de macro le next R fonctionne.

    Tu auras des précisions supplémentaires dans cet article.
    0