Première cellule libre

Pinafo

XLDnaute Nouveau
Bonjour le Forum
Je bute sur un problème depuis quelque temps et je demande de l'aide.
J'ai une base de données qui contient des milliers d'enregistrements que j'utilise un USFORM pour les nouvelles saisies.
Pour cela j'ai créé la procedure ci-après pour me positionner à la première ligne libre et effectuer ma saisie:
Sub Rechercher()
'se positionner sur la première ligne libre
Sheets('Saisie').Activate
Range('A1').Select
Row = 3
While ActiveSheet.Cells(Row, 1).Value <> ''
ActiveSheet.Cells(Row, 1).Select
Row = Row + 1
Wend
ActiveSheet.Cells(Row, 1).Select
End Sub
Elle fonctionne mais le temps mis pour parcourir les enregistrements est trop trop long. Je veux reduire ce temps au strict minimum mais je n'arrive pas malgré mes recherches sur les anciens posts et sur les doc
Toute aide me sera très utile. Merci d'avance.
 

Hervé

XLDnaute Barbatruc
Bonjour farida, le forum

C'est vrai que c'est pas la méthode la plus rapide pour trouver une ligne vide dans une colonne.

les boucles while sont assez lentes, et en plus tu sélectionnes les cellules .


une autre syntaxe :

Sub Rechercher()
'se positionner sur la première ligne libre
Sheets('Saisie').Activate
Range('a65536').End(xlUp).Offset(1, 0).Select


End Sub

A savoir que tu n'es pas obligé (mais alors pas obligé du tout) de sélectionner une feuille ou une cellule pour travailler dessus.

salut

Message édité par: Hervé, à: 15/10/2005 09:29
 

Pinafo

XLDnaute Nouveau
Bonjour Hervé, bonjour le forum
Merci bcp Hervé pour ta prompte réaction. Ton code code est genial mais à la validation de la saisie, il bug car je lui demande une incrementation du numero d'enregistrement qui sera inscrit dans la premiere cellule de la premiere colonne (numero). Pour me faire mieux comprendre je joint dans peu de temps une copie allegee de mon fichier.
Merci et A+
 

Pinafo

XLDnaute Nouveau
Bonjour le forum, Hervé, Bricofire,
Merci je reessaye. C'est bizare qand meme. Peut - être à cause du é.
Hop c'est parti [file name=Donneesfarida.zip size=40121]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Donneesfarida.zip[/file]
 

Pièces jointes

  • Donneesfarida.zip
    39.2 KB · Affichages: 21

Bricofire

XLDnaute Impliqué
Re tous les deux, le forum :)

Bon Farida, non la soluce à hervé ne bugge pas (ce serait étonnant :lol: ), mais le problème récurrent des fils est la question posée ;)

Si j'ai compris ton classeur, ton pb est de définir rapidos le 'Numéro' de ta case d'USF....

Voici une piste en squattant la réponse d'Hervé :p


numéro = Range('a65536').End(xlUp).Row - 1



Te donnes le N° direct de le ligne à activer pour ta cellulle... si je suis pas à côté de la plaque !

édition : Euh, non ,ça te donnes le N° que tu obtiens de base au lancement de ton USF, la ligne libre étant la 828, mais c'est apparemment ce que tu recherches si j'ai compris ton code, sinon un peu de détails aideront...
Bon WE

Bfr

Message édité par: bricofire, à: 15/10/2005 11:25
 

Pinafo

XLDnaute Nouveau
Re-salut Bricofire, le forum
J'ai ajouté la ligne numéro = Range('a65536').End(xlUp).Row - 1, (numero=No_s) que tu m'as suggeré mais il se rebelle tjrs. Peut-etre un mauvais emplacement de ma part . (coe ecrivait disait CONFISCIUS : Le maitre indexe la lune et l'eleve regarde le doigt). Merci de ton aide, je poursuis mon bricolage. Bonne fin de Week a toi
 

Bricofire

XLDnaute Impliqué
Re Farida, Hervé :)

:S Arghhh Farida... tu me fais peur, j'espère q'Hervé n'as pas lu ton code, il est cardiaque :)

Je n'avais pas percuté au premier passage :whistle:

Ne prend pas ça mal, mais comme des conseils qui restent relatifs et n'impliquent que leur auteur (là je devrai mettre surement au pluriel :) )

Ton code possède des bombes a retardement, dont le rôle, comme leurs noms l'indique, est de te pèter au nez à un moment ou à un autre....


Ne jamais donner à des variables des mots clefs de VBA !


Je ne comprend pas d'ailleurs comment le débogueur laisse passer ça :ermm: il devrait dire 'truc ambigue'

Tu vas voir l'embrouille tout de suite, Row est une propriété d'un objet Range en VBA et dans ton code c'est aussi le nom d'une variable.Donc dans la piste que je t'ai fournie, Row est bien sur la propriété, quand tu as essayé de l'insérer dans ton code tu l'as considéré sans doute comme variable avec les conséquences ad-hoc.... :silly:

Bon pour essayer de te faire percuter la chose, j'ai corrigé ton code selon ton approche, mais c'est très très mauvais, même si ça fonctionne. donc vois ce que ça donne, je te mets le fichier aussi, mais dépêche toi de changer ton (ou tes s'il y en a d'autres) nom de variable et ne dis pas que j'ai écris une chose pareille...
Un des avantages du Vba en anglais, c'est que tu peux donner à ta variable le nom Ligne par exemple sans risques de confusion et avec autant de clareté...

Sub Rechercher()
' Sheets('Saisie').Activate
' Range('A1').Select ''** Ton code désactivé**
' Row = 3
' While ActiveSheet.Cells(Row, 1).Value <> ''
' ActiveSheet.Cells(Row, 1).Select
' Row = Row + 1
' Wend
'ActiveSheet.Cells(Row, 1).Select
'******************
Cells(Range('A65536').End(xlUp).Row + 1, 1).Select
Row = ActiveCell.Row 'l'horreur les 2 row n'ont rien à voir !
End Sub


Bon courage,

Bfr

PS : Tu gagnerais surement aussi à appeller tes procédures avec Call xxxxx explicite plutot que xxxxx tout court. [file name=DonneesfaridaV2.zip size=38960]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/DonneesfaridaV2.zip[/file]
 

Pièces jointes

  • DonneesfaridaV2.zip
    38 KB · Affichages: 22

Pinafo

XLDnaute Nouveau
Salut Bricofire, Salut le forum,
Merci bcp pour les corrections et surtout les conseils. Effectivement je sentais venir le danger au fur et à mesure que les enregistrements devenaient de + en + importants. Etant novice en VBA, je l'ai fait pour me faciliter ma tache mais je me suis rendu compte que je me la compliquait d'avantage. Je crois que je vais utiliser pour l'instant les listes de choix avec la fonction DECALER et le GENIAL calendrier de myDearFriend! (que je salue au passage) que j'ai gracieusement telechargé sur le site Veriti. Merci bcp pour ta contribution et surtout les conseils. J'abandonne pour le moment le USF et je me mets dans l'etude de VBA.
Bon Week End à tous.
 
B

Bricofire

Guest
re Hervé, Farida, :)

Oui, il faut prendre conscience de certaines choses, mais il ne faut jamais baisser les bras, ton code si tu l'as crée a un mérite, il fonctionne à un certain niveau et c'est déjà pas mal, en dehors de ça quitte à te renseigner, mieux vaut t'éviter les impasses tout de suite, mais pas te décourager, vois sur la partie téléchargement les différentes choses proposées en formation, achète des bouquins du genre programmation pour excel pour les nuls version oct 2004 ou sup et vas y pas à pas tout en faisant des trucs à côté, ce sera la magie ces lanternes éclaireront ta route au fur et à mesure de tes progrès (cf confucius) et te montreront que ta perception des réalisations de myDearFriend étaient plus étroites que tu ne le pensaient. l'important est d'abord le plaisir de la création, ensuite si tes applis ne concernent que toi, tu peux être moins exigente dans un premier temps :)
Donc si la version de ton fichier proposée fait ce que tu veux, tu peux continuer dessus quitte à reposer des questions, point par point, sur de nouveaux fils au besoin si le sujet est bien ciblé et explicité :)

Bonne nuit et bon courage,

Bfr

édition : Glup, déconnecté ....

Message édité par: bricofire, à: 16/10/2005 00:50
 

Discussions similaires

Réponses
3
Affichages
588

Statistiques des forums

Discussions
312 300
Messages
2 087 000
Membres
103 429
dernier inscrit
PhilippeH