Insérer des n° dans les cellules avec VBA

Fermé
Chgo - 13 nov. 2007 à 22:46
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 15 nov. 2007 à 20:41
Bonjour,
Etant un débutant, je suis un peu perdu dans mon code.
J'ai un code qui numérote dans un sens ou dans l'autre et qui fonctionne bien.
L'emplacement des n° était défini dans le UserForm1, donc quasiment fixe.
Mais je voudrai définir l'emplacement des n° en mettant n1 et n2 dans les cellules qui doivent recevoir les numéros.
J'ai bidouillé quelques lignes mais cela ne fonctionne pas et je ne sais pas vraiment quelle fonction utilisée.
Si quelqu'un pouvait m'aider, se serait sympa.
Je joins mon code.
Merci, Chgo

Private Sub CommandButton1_Click()
   
 Dim PageDe As Single, PageA As Single, p As Single
    Dim sPas As Single, sBorneMin As Single, sBorneMax As Single
    Dim celA As String, celB As String, celC As String, celD As String
    
    Dim i As String
      For i = 1 To 2
        If Range("A1:T21").Value = Cells.Value = "n1""n2" Then
  
        If TextBox1.Value <> "" And TextBox2.Value <> "" Then
          PageDe = TextBox2
          PageA = TextBox1 / 5
        
        Unload Me
        
        If CheckBox1.Value = True Then
            sBorneMin = PageDe
            sBorneMax = PageA + TextBox2 - 1
            sPas = 1
        Else
            sBorneMin = PageA + TextBox2 - 1
            sBorneMax = PageDe
            sPas = -1
        End If
        
        For p = sBorneMin To sBorneMax Step sPas
            Range("D13", Cells.Value = n1).Value = p
            Range(Cells.Value = n2).Value = p + 1 * PageA
            Worksheets("Feuil4").PrintOut
                
        Next p
        
        Range("D13").Value = 0
       End If
    
    End If
    
  Next i
 
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 5 <> 0 Then
            MsgBox "Veuillez saisir un multiple de 5", 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 / 5)
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

8 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
14 nov. 2007 à 01:07
Le Unload décharge ton formulaire ... c'est surprenant à cet endroit ... En faisant ça tu fermes ta fenêtre...

Ensuite j'ai relevé ça :
Tu fais : For i = 1 to 2 ??? mais tu testes la même chose ???
De plus dans ton premier if tu as 2 égalités ??? dont la dernière = "n1""n2" ??? si tu veux concaténer il faut le signe & ou un + ("n1" & "n2")
Tu ne peux avoir 2 égalités ou alors il te faut un comparateur logique (And ou Or). Il y a plusieurs lignes avec la même erreur...

Je n'ai pas testé mais à première vue ça ne peut pas marcher.

;o)

Polux
1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
13 nov. 2007 à 23:01
bonjour,

En parcourant rapidement le code j'ai relevé ceci :

...
Dim i As String
For i = 1 To 2
If Range("A1:T21").Value = Cells.Value = "n1""n2"
Then

If TextBox1.Value <> "" And TextBox2.Value <> ""
Then
PageDe = TextBox2
PageA = TextBox1 / 5

Unload Me
...

Dim i As String : i est de type intéger et non un string (chaine de caractère) ...

Unload Me : Pas bon ... il faut d'abord sortir de la procédure avant de décharger le formulaire ...

Il préférable de faire une fonction qui renvoie un booléan à partir de l'évènement click.

;o)

Polux
0
naitgo Messages postés 5 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 24 novembre 2007
13 nov. 2007 à 23:52
Bonsoir Polux,
Merci pour ton aide, pour Unload Me, sur une autre version du code il est à cet endroit, alors je ne comprends pas.
Je remets le code avec des commentaires.
Private Sub CommandButton1_Click()

'définition des variables
  Dim PageDe As Single, PageA As Single, p As Single
  Dim sPas As Single, sBorneMin As Single, sBorneMax As Single
  Dim celA As String, celB As String, celC As String, celD As String
  Dim i As Integer
  
'boucle pour la recherche des cellules à remplir
  For i = 1 To 2
    If Range("A1:T21").Value = Cells.Value = "n1""n2" Then
      
'identification des chiffres contenu dans TextBox 1 et 2
      If TextBox1.Value <> "" And TextBox2.Value <> "" Then
        PageDe = TextBox2
        PageA = TextBox1 / 5
        Unload Me
 
'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
          Range ("D13"), i = Cells.Value = n1.Value = p
          Range i = Cells.Value = n2.Value = p + 1 * PageA
          Worksheets("Feuil4").PrintOut
        Next p
 
 'remise à zéro de la cellule servant au démarrage code
        Range("D13").Value = 0
      
      End If    ' TextBox1.Value <> ""And TextBox2.Value <> ""Then
    End If    ' Range("A1:T21").Value = Cells.Value = "n1""n2"Then
 Next i
End Sub
0
naitgo Messages postés 5 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 24 novembre 2007
14 nov. 2007 à 13:40
bonjour Polux,
Je voudrai utiliser la boucle For pour parcourir la plage de cellules (A1, A21), afin qu'elle trouve les cellules contenant n1 et n2. Je pensai qu'il fallait qu'elle parcoure 2 fois la plage de cellules pour trouver n1 et n2. Je n'arrive pas à exprimer cela en VBA.
Ensuite, lorsque les n1 et n2 seront trouvés je souhaiterai que le code insère les N° générés par la formule à la place de n1 et n2.
Merci pour ton aide et tes explications.
Chgo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
14 nov. 2007 à 15:09
Bonjour,

Je ne sais pas ce que tu cherches à faire exactement mais je ferai un truc de ce genre pour la boucle :

Dim i As Integer
Dim str As Variant

With WorkSheets(1) ' Ta feuille sur laquelle tu effectues ta recherche

For i = 1 to 21
str = .Range("A" & i).Value
If str = "n1" Then
' mettre ici le code pour le traitement à effectuer pour "n1" trouvé
...
ElseIf str = "n2" Then
' mettre ici le code pour le traitement à effectuer pour "n2" trouvé
....
End If
Next i
....
End With
...

Il y a toujours le problème du Unload qui me gène un peu.

If TextBox1.Value <> "" And TextBox2.Value <> "" Then
PageDe = TextBox2
PageA = TextBox1 / 5
Unload Me
...


Cette partie pourrait être traitée dans une fonction qui retourne un booléan.

"PageA = TextBox1 / 5" ... impossible !!!
Tu testes TextBox1.Value <> " " ... donc TextBox contient une chaine de caractères ... il est préférable d'écrire ensuite :
PageA = Cint(TextBox1.Value) / 5
ou alors : if TextBox1.Value <> 0 ... si la valeur saisie est de type numérique ...

Bon courage ...

N'hésite pas si tu as encore des blèmes.

;o)

Polux
0
naitgo Messages postés 5 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 24 novembre 2007
14 nov. 2007 à 22:16
Bonsoir Polux,
Je viens de lire ton message, et je te remercie pour l'attention que tu portes à mon projet de code.
Ce que je veux faire ? c'est simplement numéroter des tickets avec souche (bourriche, tombola) en plusieurs poses sur un A4.
Quand je parle de plusieurs poses cela veut dire 4 tickets, comportant chacun 2 N° identiques, sur un A4, est-ce que tu comprends mieux mon projet ?
Comme je l'ai mis dans mon premier message j'ai le code qui numérote 5 tickets sur un A4, c'est pour cela que tu trouves : "PageA = TextBox1 / 5"
lorsqu'on entre le nombre de tickets à créer dans TextBox1 il est divisé par 5 (chiffre que j'aurai dû changer)
par exemple on veut 100 tickets le code génère : 1er ticket 1 à 20
2e ticket 21 à 40 5 tickets sur la même feuille
3e ticket 41 à 60 3 numéros identiques par ticket (je te mets le code plus bas)
4e ticket 61 à 80
5e ticket 81 à 100
ce qui imprime 20 feuilles A4, est-ce plus clair ?

Comme je l'ai dit précédemment ce code fonctionne bien, mais l'emplacement des N° est un peu figé puisqu'il faut accéder au code VB pour changer la position des N°.

Donc, je cherche une solution pour pouvoir changer l'emplacement des N° sans aller dans VB et en mettant simplement, par exemple, n1 dans 2 cellules pour le premier ticket, puis n2 dans deux autres cellules pour le deuxième ticket et ainsi de suite, d'où la boucle pour la plage A1:T21 qui recherche n1, n2, n3, n4 (je viens de voir que dans mon précédent message j'ai mis A1:A21, ce qui n'est pas bon)
Je te mets le code qui fonctionne avec 5 tickets et les cellules fixes qui reçoivent les N°. Je pense que cela t'aideras à comprendre ce que je veux faire.
Encore merci, Chgo

Private Sub CommandButton1_Click()
    Dim PageDe As Single, PageA As Single, p As Single
    Dim sPas As Single, sBorneMin As Single, sBorneMax As Single
    
    If TextBox1.Value <> "" And TextBox2.Value <> "" Then
        PageDe = TextBox2
        PageA = TextBox1 / 5
        
        Unload Me
        
        If CheckBox1.Value = True Then
            sBorneMin = PageDe
            sBorneMax = PageA + TextBox2 - 1
            sPas = 1
        Else
            sBorneMin = PageA + TextBox2 - 1
            sBorneMax = PageDe
            sPas = -1
        End If
        
        For p = sBorneMin To sBorneMax Step sPas
            Range("E10,M10,T10").Value = p
            Range("E21,M21,T21").Value = p + 1 * PageA
            Range("E32,M32,T32").Value = p + 2 * PageA
            Range("E43,M43,T43").Value = p + 3 * PageA
            Range("E54,M54,T54").Value = p + 4 * PageA
            Worksheets("Feuil4").PrintOut
                
        Next p
        Range("E10").Value = 0
    End If
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 5 <> 0 Then
            MsgBox "Veuillez saisir un multiple de 5", 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 / 5)
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


0
naitgo Messages postés 5 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 24 novembre 2007
15 nov. 2007 à 20:34
Bonsoir à tous et à Polux,
Je suis toujours dans mes N°, j'essaie de faire une boucle For et j'ai une erreur qui apparait dans la ligne : If str = "n1" And std = "n2" Then,
voici le bout de code :
'boucle pour la recherche des cellules à remplir
  For i = 1 To 420
         str = Range("A1:T21" & i).Value
         std = Range("A1:T21" & i).Value
      If str = "n1" And std = "n2" Then

Encore une fois un peu d'aide serait bienvenue.
Merci, Chgo
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
15 nov. 2007 à 20:41
Bonsoir,

Désolé, je n'ai pas eu le temps de me pencher sur le problème ... il faudrait me faire passer le fichier Excel pour que je puisse voir exactement comment tout ça s'articule ... il y a un lien mais je ne le connais pas ... :o(

Pour le post 7 ... la syntaxe est incorrecte ... ça ne marche pas comme ça ...

Dès que j'ai le fichier, je jete un oeil et je retourne mes propistions.

;o)

Polux
0