Incrémenter test cellule non vide

Résolu
jib92 -  
 jib92 -
Bonjour,

Je travaille sous excel 2003.

Je souhaite enregistrer des données dans un tableau.

Pour cela je souhaite faire un test:

première cellule à tester : B3
si cellule vide, la macro doit enregistrer des données dans la ligne 3
si cellule non vide, la macro doit tester B4, puis B5... jusqu'à trouver une ligne vide pour enregistrer les données.

Le but est d'enregistrer des données sans effacer les enregistrements précédents.

Merci d'avance.

jib92, apprenti...
A voir également:

8 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
pour un débutant c'est pas mal...
tu peux faire plus court avec par exemple :
    Set ws = Worksheets("Feuil1")
    Set ws1 = Worksheets("Feuil2")
    derlig = ws1.[B65536].End(xlUp).Row + 1
    If derlig < 3 Then derlig = 3
    ws.[B14:D14].Copy Destination:=ws1.Range("B" & derlig)

puisque tu as défini des variables pour les noms des feuilles, autant s'en servir.

Et pour inscrire une valeur même ligne colonne 5 (E) tu peux faire :
ws1.Cells(derlig, 5).Value = UserForm1.TextBox1.Text


eric
2
jib92
 
Bonjour,

J'ai résolu mon problème de #ref en copiant directement de C7. Par contre je n'ai pas trouvé pour copier sans la mise en forme. Je vais etre obligé d'utiliser Paste Special mais je ne vois pas comment l'intégrer dans ta procédure qui marche bien.
2
Leahkim Messages postés 3081 Date d'inscription   Statut Membre Dernière intervention   281
 
Facile !!

voila l'algo:

declarer A=3,

tant que (cellule(A,2)<>"")
A=A+1
fin tantque

coller les données dans la cellule(A,2)


ainsi, il vérifie toutes les cellules a partir de B3 et des qu'il y en a une qui est vide il y colle ce que tu as copié
1
jib92
 
Merci de répondre aussi vite.

Pour commencer je suis vraiment au stade débutant.

J'ai écris:

Set ws = Worksheets("Fiche de maintenance")
Set ws1 = Worksheets("Fiche client refusée")

Range("B14:D14").Select
Selection.Copy
Sheets("Fiche client refusée").Select

i = 3

if ws1.Range("B" & i).Value <> ""
Application.CutCopyMode = False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
i = i + 1
end


Moi je me comprends à peu près mais vba pas du tout (mais alors vraiment pas)...

en français:

Feuille ("Fiche de maintenance")

copie des cases B14 à D14

Feuille ("Fiche client refusée")

ligne de départ: i=3

Si B(3) vide alors copie des cases B14 C14 D14 (de ws) dans B3 C3 D3 (ws1)
sinon (B(3) non vide)
on incrémente i=i+1 et on refait le test jusqu'a trouver une ligne vide où copier les données


Par ailleurs, Je voudrais mettre dans E(i) F(i) G(i) des données venant d'une textbox. Vu que je ne connais pas la syntaxe vba, je ne suis pas arrivé... je pense que je devrais enregistrer les valeurs provenant de la listbox avant de faire ma recherche de ligne.
1

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

Posez votre question
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

Pour sélectionner la 1ère cellule vide de la colonne B :
[B65536].End(xlUp).Offset(1, 0).Select
eric
0
jib92
 
ça marche bien, j'avoue que j'aurais pas deviner la manip...

Comment pourrais je faire cette copie sans la mise en forme de départ? et le D(i), feuille 3 créé qui est une copie de D14, feuille 1 qui est déjà C7 de la même feuille... (programme torturé) m'indique #REF. C'est un nombre, peut être faut il le préciser ou copier directement de C7... je sais pas. Je précise qu'ensuite j'efface C7 donc D14 et je souhaite conserver la valeur enregistrée dans l'autre feuille.

Merci Eric
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Comment pourrais je faire cette copie sans la mise en forme de départ?
à ma connaissance pas avec .copy.
Donc soit retourner au copier/coller avec .PasteSpecial Paste:=xlPasteValues
ou bien s'il n'y a pas bcp de mise en forme à reprendre la modifier sur les cellules d'arrivée

#REF
indépendant de la macro (enfin le bout que je t'ai donné), à régler sur ta feuille... peut-être des suppressions de cellules un peu hatives et des formules y faisaient référence, ressaisi tes formules.
0
jib92
 
J'ai trouvé.

ws1.Cells(derlig, 2).Value = ws.[B14].Value

Plus de mise en forme du coup.

Merci encore
0