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 :
Le remplacement de variables en shell Bash Voir=Le remplacement de variables= Introduction Il peut s'avérer utile de s'assurer qu'une variable est bien définie avant de procéder à son remplacement, ou tout simplement de s'assurer que celle-ci n'est pas vide, et dans ce cas de l'initialiser avec...
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...
Tableur - La sélection des cellules VoirSélection de cellules Le tableur est un formidable outil pour manipuler des données. Ainsi, pour pouvoir manipuler les données il est nécessaire de disposer d'outils permettant de sélectionner rapidement toutes les cellules dont on a...

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