Optimiser la recherche d'une case vide dans excel

cs_Jacky7 Messages postés 63 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 22 juin 2011 - 21 mai 2008 à 00:38
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 - 28 mai 2008 à 09:02
Bonsoir à tous,

J'ai realisé un prog qui permet l'écriture dans un fichier Excel, problème lorsque beaucoup de cases et de pages seront remplis j'ai peur que le prog soit trop long et perde des infos le temps de rechercher une case vide.

Pour effectuer la recherche d'une case vide, j'utilise une methode que j'ai trouvé sur le site :

LigneVide = oWk.Sheets(VariablePage).Cells(Rows.Count, "A").End(xlUp).Row + 1

Je me demandais s'il n'était pas possible de garder le numero de la page et de la case en memoire afin que le prog sache où il doit ecrire directement lorsqu'il recevra la prochaine info et non pas rechercher à chaque fois la première case vide de la colonne.

Est ce que quelqu'un aurait une idée sur la facon dont je pourrai m'y prendre ?

Merci.
Jack.

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 mai 2008 à 01:15
Salut ou Re ;-)
Oui, à toi de tester les deux solutions.
Le programme qui va faire cette recherche doit, je pense, être contenu dans une macro.
Cette macro fait partie d'une feuille.
Dans la partie Déclaration de ta feuille (tout en haut), déclare la variable qui mémorisera cette données :
   Dim maLigne As Integer
   Dim maColonne As Integer
Ensuite, dans ton code, tu peux mémoriser tes chiffres n'importe où (dans cette feuille).
Il te suffira donc d'utiliser le contenu de ces variables pour aller à la bonne place : Cells(maColonne, maLigne)
Puis, quand tu auras écrit une valeur dans cette cellule, d'incrémenter la ou les variables pour préparer la prochaine insertion.
Si, au moment où tu veux utiliser tes variables, elles sont vides, il faudra faire une première recherche telle que tu l'as décrite.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
21 mai 2008 à 09:35
Jack,

"Il te suffira donc d'utiliser le contenu de ces variables pour aller à la bonne place : Cells(maColonne, maLigne)"

Je me permets une petite rectification: Cells(MaLigne, MaColonne)

Jimy
0
cs_Jacky7 Messages postés 63 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 22 juin 2011 3
21 mai 2008 à 18:34
Salut,

J'ai testé différentes solutions afin de garder en mémoire le numéro de ligne, mais j'ai un souci lorsque je sort de la boucle if on dirai que la valeur de LigneVide revient automatiquement à zéro ?? (je teste sa valeur avant la prochaine réecriture et LigneVide toujours = 0).
Serait- il possible de garder ce numéro en mémoire (LigneVide) à chaque sorti de boucle (voir même à la fermeture de VB6) afin que mon prog passe dans la 2eme partie de la boucle (ElseIf) ?

Voila ce que j'ai fait :

MsgBox (LigneVide)  

    If LigneVide = 0 Then


LigneVide = oWk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1 
MsgBox (LigneVide)
   
    ElseIf LigneVide > 0 Then
  
LigneVide = LigneVide + 1
MsgBox "MaLigne"
   
    End If

oWk.Sheets(1).Range("A" & LigneVide) = Text2

Est ce quelqu'un aurait une idée ?
Merci
Jack.
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
21 mai 2008 à 21:52
Comme t'as proposé Jack, place ta variable en global. Si tu la declare dans la procedure qui l'utilise, elle sera "dimentionnée" (Dim ...) donc réinitialisée à chaque execution.

Public LigneVide As Integer 'dans "Genenrale /Declaration"

Puis,
Private Sub CommandButton1_Click()

MsgBox (LigneVide)

If LigneVide = 0 Then
LigneVide = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1
MsgBox (LigneVide)
ElseIf LigneVide > 0 Then
LigneVide = LigneVide + 1
MsgBox "MaLigne"
End If
Sheets(1).Range("A" & LigneVide) = Text2

End Sub

Jimy
0

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

Posez votre question
cs_Jacky7 Messages postés 63 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 22 juin 2011 3
27 mai 2008 à 17:40
Salut jimy neutron,

La solution que tu m'as donné fonctionne merveilleusement bien, je voulais simplement savoir s'il serait possible de garder cette valeur lorsque je ferme mon programme et VB6 en mémoire afin que mon prog sache où il doit écrire lors de la prochaine ouverture ou bien doit-je faire une recherche à chaque fois que je lance mon prog ?

Merci
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
28 mai 2008 à 09:02
Salut,

Oui, tu peux garder la valeur de cette variable, mais uniquement dans un fichier texte ou Ini que tu ecris lors de la fermeture de l'appli, et que tu lis à l'ouverture, autrement, elle sera forcement effacer à la fermeture.
La methode est simple, et tu trouveras beaucoup d'exemples dans la rubrique "code" du site, avec les mots clés "Fichier ini" ou "fichier texte"....

A+

Jimy
0
Rejoignez-nous