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
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
A voir également:
- Insérer des n° dans les cellules avec VBA
- Insérer une vidéo dans powerpoint - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Insérer signature word - Guide
- Insérer liste déroulante excel - Guide
- Verrouiller des cellules excel - Guide
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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 :
Encore une fois un peu d'aide serait bienvenue.
Merci, Chgo
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
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
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
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