erreur 400

chgo

XLDnaute Nouveau
Bonjour,
J'ai un code qui génère une numérotation et qui place les numéros dans des cellules qui contiennent les mots : n1 et n2.
Lorsque je veux lancer l'impression j'ai l'erreur 400 qui s'affiche et qui me dit "feuille déjà affichée ; affichage modal impossible"
Avant que j'utilise le code recherche et remplace, le code fonctionnait très bien en mettant la référence des cellules qui doivent recevoir les n° après la boucle For (Range("b5").value=p) par exemple.
N'étant pas très calé en VB je n'arrive pas à résoudre ce problème, je vois bien que c'est un problème d'ouverture et fermeture de feuille ou de UserForm mais je ne vois pas ce que je doit corriger.
Est-ce que quelqu'un peut m'aider ?
Merci beaucoup.
Voici le code du UserForm
Code:
Private Sub CommandButton1_Click()

'déclaration des variables
  Dim PageDe As Single, PageA As Single, p As Single
  Dim sPas As Single, sBorneMin As Single, sBorneMax As Single
  Dim numA As String, numB As String
  
  'identification des chiffres contenu dans TextBox 1 et 2
      If TextBox1.Value <> "" And TextBox2.Value <> "" Then
        PageDe = TextBox2
        PageA = TextBox1 / 2
    

'définition du sens de numérotation (montant ou descendant)
      If CheckBox1.Value = True Then
          sBorneMin = PageDe
          sBorneMax = PageA + TextBox2 - 1
          sPas = 1
        Else
          sBorneMin = PageA + TextBox2 - 1
          sBorneMax = PageDe
          sPas = -1
      End If
      
'boucle qui génère les numéros dans les cellules concernées
         For p = sBorneMin To sBorneMax Step sPas
         
'insertion de p dans une variable
            numA = p
            numB = p + 1 * PageA
            
'recherche les cellules contenant n1, n2 etc... et remplace leur contenu par une variable
    Cells.Replace What:="n1", Replacement:=numA, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    Cells.Replace What:="n2", Replacement:=numB, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False

            Worksheets("Feuil4").PrintOut
           
        Next p
           
'remise à zéro de la cellule servant au démarrage du code
        Range("D13").Value = 0
        
            End If    ' If TextBox1.Value <> "" And TextBox2.Value <> "" Then
  
  Unload Me

End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub


Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Value <> vbNullString Then
        If CLng(TextBox1.Value) Mod 2 <> 0 Then
            MsgBox "Veuillez saisir un multiple de 2", vbCritical + vbOKOnly, "Attention..."
            Cancel = True
            TextBox1.Value = ""
            TextBox1.SetFocus
        End If
    End If
End Sub

Private Sub TextBox1_Change()
    Label4.Caption = 0
    If TextBox1.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox1.Value)
    If TextBox2.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox2.Value)
    Label6.Caption = 0
    If TextBox1.Value <> "" Then Label6.Caption = CDbl(TextBox1 / 2)
End Sub

Private Sub TextBox2_Change()
    Label4.Caption = -1
    If TextBox1.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox1.Value)
    If TextBox2.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox2.Value)
End Sub
 

JNP

XLDnaute Barbatruc
Re : erreur 400

Bonjour chgo, Banzai64 :),
A priori, j'ai l'impression que ton erreur vient de ce que tu demandes de faire les impressions alors que ton USF est encore ouvert.
J'essayerais 2 solutions :
1) Dans les propriétés de ton USF, tu as ShowModal = True. Essaie de le mettre sur False (cela permet d'être simultanément sur l'USF et sur la feuille)
2) Déclare plutôt des variables publiques pour rapatrier les valeurs de ton USF et mets l'essentiel de ton code dans un module qui continuera de s'exécuter après la fermeture de ton USF
A te lire :cool:
 

chgo

XLDnaute Nouveau
Re : erreur 400

Bonjour Banzaï64, JNP et tout le forum,
J'ai trouvé la solution (pas tout seul) à mon "erreur 400", j'ai créé un bouton sur le feuillet 4, en cliquant sur ce bouton on affiche le UserForm où on entre les informations puis on lance l'impression des feuilles et tout fonctionne.
code du bouton, tout simple :
Private Sub BoutonCréer_Click()
UserForm1.Show
End Sub
Après le ".PrintOut" j'ai remis le code "recherche et remplace" pour remettre le n1 et n2, sinon, et c'est logique, le code ne change les chiffres qu'une seule fois.
Voilà, encore merci pour votre aide.
Chgo
 

Discussions similaires

Réponses
12
Affichages
498

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 017
dernier inscrit
annboi19