Optimiser la recherche d'une case vide dans excel

Signaler
Messages postés
63
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
22 juin 2011
-
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
Messages postés
63
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
22 juin 2011
3
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.
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
Messages postés
63
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
22 juin 2011
3
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
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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