Rechercher : dans
Par :

Incrémenter test cellule non vide

Dernière réponse le 18 sep 2008 à 09:35:39 jib92, le 17 sep 2008 à 14:36:38 
 Signaler ce message aux modérateurs

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...

Configuration: Windows XP
Opera 9.51

Meilleures réponses pour « incrémenter test cellule non vide » dans :
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en...
Choisir sa carte graphique en fonction de sa référence VoirClassement des cartes graphiques par leur référence Les conseils pour le choix d'une carte graphique sont donnés dans l'astuce : Choisir une carte graphique pour son PC Ici, on va donner les clés de décodage pour comprendre comment les...

1

Leahkim, le 17 sep 2008 à 14:47:28

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é Si vous n'y arrivez pas du premier coup, appelez ça la version 1.0

Répondre à Leahkim

2

eriiic, le 17 sep 2008 à 15:00:29

Bonjour,

Pour sélectionner la 1ère cellule vide de la colonne B :
[B65536].End(xlUp).Offset(1, 0).Select
eric

Répondre à eriiic

3

jib92, le 17 sep 2008 à 15:06:38

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.

Répondre à jib92

4

eriiic, le 17 sep 2008 à 15:33:28
  • +2

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

Répondre à eriiic

5

jib92, le 17 sep 2008 à 16:37:45

ç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

Répondre à jib92

6

eriiic, le 17 sep 2008 à 16:54:25

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.

Répondre à eriiic

7

jib92, le 18 sep 2008 à 09:15:40
  • +1

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.

Répondre à jib92

8

 jib92, le 18 sep 2008 à 09:35:39

J'ai trouvé.

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

Plus de mise en forme du coup.

Merci encore

Répondre à jib92