OVH Cloud OVH Cloud

Incrémentation automatique

11 réponses
Avatar
c.estrem
bonjour,
j'ai un fichier qui regroupe mon plan d'action
quand je clique sur mon bouton "rajouter une action" une ligne s'ajoute
=E0 mon fichier et le num=E9ro de mon action est incr=E9ment=E9
automatiquement dans la colonne A. 1,2,3..
Je voudrai faire la m=EAme chose mais cette fois-ci avec une lettre en
plus
Q1, Q2, Q3.... ( Q pour Qualit=E9 :) )
et l=E0 mon code ne marche plus comme j'ai une chaine de caract=E8re
Merci de votre aide

j =3D 9
While Sheets("En cours").Cells(j, 1) <> ""
j =3D j + 1
Wend

10 réponses

1 2
Avatar
JLuc
avait soumis l'idée :
bonjour,
j'ai un fichier qui regroupe mon plan d'action
quand je clique sur mon bouton "rajouter une action" une ligne s'ajoute
à mon fichier et le numéro de mon action est incrémenté
automatiquement dans la colonne A. 1,2,3..
Je voudrai faire la même chose mais cette fois-ci avec une lettre en
plus
Q1, Q2, Q3.... ( Q pour Qualité :) )
et là mon code ne marche plus comme j'ai une chaine de caractère
Merci de votre aide

j = 9
While Sheets("En cours").Cells(j, 1) <> ""
j = j + 1
Wend


Ce que tu as écris marche quelque soit le contenu des cellules.
tu commences à la ligne 9 et tant que le contenu de la cellule est
different de "rien", tu boucle en incrementant le numero de ligne.
Quand tu sort de la boucle, j pointe sur la ligne dont la cellule est
"vide"

--
JLuc

Avatar
JLuc
avait soumis l'idée :
bonjour,
j'ai un fichier qui regroupe mon plan d'action
quand je clique sur mon bouton "rajouter une action" une ligne s'ajoute
à mon fichier et le numéro de mon action est incrémenté
automatiquement dans la colonne A. 1,2,3..
Je voudrai faire la même chose mais cette fois-ci avec une lettre en
plus
Q1, Q2, Q3.... ( Q pour Qualité :) )
et là mon code ne marche plus comme j'ai une chaine de caractère
Merci de votre aide

j = 9
While Sheets("En cours").Cells(j, 1) <> ""
j = j + 1
Wend


Pour récuperer l'ancienne valeur et lui ajouter 1 :
Sheets("En cours").Cells(j, 1) = "Q" & _
Val(Mid(Sheets("En cours").Cells(j - 1, 1),2)) + 1

--
JLuc

Avatar
c.estrem
Ca marche pas trop encore, la macro ne ve pas être éxecuter... :(

Private Sub Ajouter_Click()

Dim i As Integer, j As Integer

While Sheets("En cours").Cells(j, 1) <> ""

Sheets("En cours").Cells(j, 1) = "Q" & _
Val(Mid(Sheets("En cours").Cells(j - 1, 1), 2)) + 1
Wend

Sheets("En cours").Rows(j - 1 & ":" & j - 1).Copy
Sheets("En cours").Rows(j & ":" & j).PasteSpecial Paste:=xlFormats,
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False

Sheets("En cours").Cells(j, 1) = Sheets("En cours").Cells(j - 1, 1)
+ 1
For i = 10 To 14: Sheets("En cours").Cells(j, i) = ".": Next
Sheets("En cours").Cells(j, 2) = Sheets("En cours").Cells(5, 3)
Sheets("En cours").Cells(j, 2).Copy
Sheets("En cours").Cells(j, 2).PasteSpecial Paste:=xlValues,
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Sheets("En cours").Cells(j, 3).Select
Avatar
Céline
petite remarque :
tu n'initialises pas ta variable j avant de lancer la boucle while
c'est pour ca que la macro ne veut pas s'éxecuter
question :
est-ce normal que tu fais un while sans incrémenter ?
je m'esplique, je ferais plutôt qqch genre
Dim i As Integer, j As Integer
j = 1

While Sheets("En cours").Cells(j, 1) <> ""
Sheets("En cours").Cells(j, 1) = "Q" & _
Val(Mid(Sheets("En cours").Cells(j - 1, 1), 2)) + 1
j=j+1

Wend
car si j'ai bien compris, tu cherches la première ligne inocuppée de

ta colonne 1
!! attention, si la ligne 1 est innocuppée, tu plantes rapidement
(Val(Mid(Sheets("En cours").Cells(j - 1, 1), 2)) + 1) car il va
chercher cells(j-1,1) où j -1 = 0 !!
a moins que je ne me trompe...

bonne après_midi



Ca marche pas trop encore, la macro ne ve pas être éxecuter... :(

Private Sub Ajouter_Click()

Dim i As Integer, j As Integer

While Sheets("En cours").Cells(j, 1) <> ""

Sheets("En cours").Cells(j, 1) = "Q" & _
Val(Mid(Sheets("En cours").Cells(j - 1, 1), 2)) + 1
Wend

Sheets("En cours").Rows(j - 1 & ":" & j - 1).Copy
Sheets("En cours").Rows(j & ":" & j).PasteSpecial Paste:=xlFormats,
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False

Sheets("En cours").Cells(j, 1) = Sheets("En cours").Cells(j - 1, 1)
+ 1
For i = 10 To 14: Sheets("En cours").Cells(j, i) = ".": Next
Sheets("En cours").Cells(j, 2) = Sheets("En cours").Cells(5, 3)
Sheets("En cours").Cells(j, 2).Copy
Sheets("En cours").Cells(j, 2).PasteSpecial Paste:=xlValues,
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Sheets("En cours").Cells(j, 3).Select


Avatar
JLuc
ATTENTION !!

avait soumis l'idée :
Ca marche pas trop encore, la macro ne ve pas être éxecuter... :(

Private Sub Ajouter_Click()

Dim i As Integer, j As Integer
' Déclarer j comme Long : Dim j As Long

' Ceci à cause de la limitation de l'integer (+/-32768) si tu as plus
de
' 33000 lignes...

While Sheets("En cours").Cells(j, 1) <> ""

' Cette boucle ne devrait être utiliser qu'une seule fois, lorsque tu
' veux mettre le Q. Donc a mettre dans une macro indepandante
' De plus, il faut penser à incrémenter la variable j

Sheets("En cours").Cells(j, 1) = "Q" & Sheets("En cours").Cells(j,
1)
j = j + 1
Wend

' Ici, pour récuper la première ligne vide :
j = Sheets("En cours").Range("A65536").End(xlup).Row + 1
' Et pour lui affecter la nouvelle incrémentation :
Sheets("En cours").Cells(j, 1) = _
Val(Mid(Sheets("En cours").Cells(j - 1, 1),2)) + 1
Sheets("En cours").Rows(j - 1 & ":" & j - 1).Copy
Sheets("En cours").Rows(j & ":" & j).PasteSpecial Paste:=xlFormats,
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False

Sheets("En cours").Cells(j, 1) = Sheets("En cours").Cells(j - 1, 1)
+ 1
For i = 10 To 14: Sheets("En cours").Cells(j, i) = ".": Next
Sheets("En cours").Cells(j, 2) = Sheets("En cours").Cells(5, 3)
Sheets("En cours").Cells(j, 2).Copy
Sheets("En cours").Cells(j, 2).PasteSpecial Paste:=xlValues,
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
Sheets("En cours").Cells(j, 3).Select
Nouvells macros :

================ Sub Renumerote()
Dim J As Long
j = 1
While Sheets("En cours").Cells(j, 1) <> ""
Sheets("En cours").Cells(j, 1) = "Q" & Sheets("En cours").Cells(j,
1)
j = j + 1
Wend
End Sub


Private Sub Ajouter_Click()
Dim i As Integer, j As Long
j = Sheets("En cours").Range("A65536").End(xlup).Row + 1
Sheets("En cours").Cells(j, 1) = _
Val(Mid(Sheets("En cours").Cells(j - 1, 1),2)) + 1
For i = 10 To 14: Sheets("En cours").Cells(j, i) = ".": Next
Sheets("En cours").Cells(j, 2) = Sheets("En cours").Cells(5, 3)
Sheets("En cours").Cells(j, 2).Copy
Sheets("En cours").Cells(j, 2).PasteSpecial Paste:=xlValues, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse _
Application.CutCopyMode = False
Sheets("En cours").Cells(j, 3).Select
...
...
End Sub

Voila, essaie comme çà

--
JLuc

Avatar
JLuc
Céline avait soumis l'idée :
!! attention, si la ligne 1 est innocuppée, tu plantes rapidement
(Val(Mid(Sheets("En cours").Cells(j - 1, 1), 2)) + 1) car il va
chercher cells(j-1,1) où j -1 = 0 !!
a moins que je ne me trompe...


Tu ne te trompe pas, dans son post d'origine, j est initialisé à 9
:')

--
JLuc

Avatar
JLuc
JLuc avait soumis l'idée :
ReATTENTION !!
J doit être initialisé à 9 et pas à 1 ;-)

--
JLuc
Avatar
Céline

JLuc avait soumis l'idée :
ReATTENTION !!
J doit être initialisé à 9 et pas à 1 ;-)

--
JLuc


;)

question :
quel est l'intéret d'un while par rapport à do... loop
si ce n'est que Excel aime la redondance en matière de vocabulaire ?

Avatar
JLuc
Céline avait soumis l'idée :

JLuc avait soumis l'idée :
ReATTENTION !!
J doit être initialisé à 9 et pas à 1 ;-)

--
JLuc


;)

question :
quel est l'intéret d'un while par rapport à do... loop
si ce n'est que Excel aime la redondance en matière de vocabulaire ?


En gros, il y en a peu. Chacun utilise celle qu'il préfère.
Avec un While, tu peux tester une condition à chaque boucle.
Avec un For, il faut tester dans la boucle si tu veux arrêter et sortir
de la boucle
Exemples équivalents :
i = 1
While i < 10
...
Wend

ou :
For i = 1 To 9
...
Next

Par contre, si tu veux tester la valeur d'une cellule :

While ActiveCell <> "Ma valeur"
ActiveCell.Offset(1, 0)
Wend

Qu'avec un For :
For i = 1 To Range("A65536").End(xlup).Row
If Cells(i, 1) = "Ma valeur" Then Exit For
Next

Si tu veux en savoir plus, va ici :
http://xlwiki.free.fr/wiki/wakka.php?wiki=BouCles

--
JLuc


Avatar
Pierre Fauconnier
Bonsoir

A ma connaissance, il n'y a pas de différence entre

Do While...Loop
et
While ...Wend

Par contre, avec While... Wend (ou Do While... Loop), il y aura toujours un
test AVANT la boucle, et donc il n'y aura peut-être aucune boucle exécutée.

Do, en revanche, peut être utilisé en plaçant le While APRES la boucle
Do... Loop While ...
Avec cette construction, la boucle est exécutée au moins une fois.

Do permet aussi un bouclage sans condition (boucle infinie) avec un test à
l'intérieur de la boucle (c'est mieux...) pour interrompre l'exécution du
code restant dans la boucle et sortir de la boucle
Do
...
If Condition=True Then Exit Do
...
Loop

Ok?

--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"Céline" a écrit dans le message de news:



JLuc avait soumis l'idée :
ReATTENTION !!
J doit être initialisé à 9 et pas à 1 ;-)

--
JLuc


;)

question :
quel est l'intéret d'un while par rapport à do... loop
si ce n'est que Excel aime la redondance en matière de vocabulaire ?

1 2