Excel 03 - tester la dernière cellule vide d'une colonne + y ajouter le nombre p

sardonick Messages postés 7 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 16 août 2009 - 5 août 2008 à 16:30
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 15 août 2008 à 11:14
Bonjour,

Je suis débutant et j'utilise naturellement Excel d'une manière atypique et sûrement grossière.

Je crée une macro, mais je bute sur deux problèmes:

Dans une colonne A il y a des nombres en ordre numérique croissant comportant quelques nombres absents.

Lors du fonctionnement de ma macro, je souhaite pouvoir automatiser:
-  la recherche de la cellule vide et afin de la remplir avec le nombre situé dans la cellule précédente +1
      
Ensuite, je souhaite pouvoir déterminer :
  
  - combien de cellules sont occupées -1 (dans la colonne A) et incorporer cette réponse dans un Chercher -    Remplacer pour mettre à jour une macro comportant ce nombre variable.

Un grand merci pour votre réponse.   

11 réponses

pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
5 août 2008 à 19:35
bonjour

pour trouver la première ligne vide, tu peux utiliser ceci

LigneVide = Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("A" & LigneVide).Select    'te positionne sur cette cellule vide

pour trouver la derniere ligne du tableau contenant une donnée

faut partir d'en bas et remonter :

DerniereLigne =Range("A65536").End(xlUp).Row

je pense qu'ensuite le reste ne doit plus te poser de probleme

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
5 août 2008 à 19:46
Ou bien, pour la dernier ligne contenant une donnée, tu peux te faire une variable qui compte le nombre de lignes vides consécutives.

Si la variable est plus grande que 30, par exemple, tu retournes à la premiere des 30 lignes vides et tu y fais ton traitement.

C'est peut-être un peu brouillon comme méthode mais c'est probablement plus rapide que de vérifier 60 000 lignes vides, même si tu es absolument certain de ne pas te tromper avec cette méthode.
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
5 août 2008 à 20:01
bonjour bonjourcheval
je te conseille d'essayer d'écrire ta méthode et de la comparer avec la mienne
si tu veux avoir un résultat fiable il va te falloir un sacré paquet de lignes de codes
et donc être beaucoup plus lent en fin de compte !

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
5 août 2008 à 20:49
Moi je pensais à :

Do until tonclasseur.EOF 'Connais pas assez les classeurs pour savoir la vraie syntaxe. Une alternative pourrais etre Do until False, mais il faut etre certain de ne pas arrivé au End Of File, donc 65 000

Lire une ligne

Do while Ligne = ""
    Lire une ligne
    compeur = compteur + 1
loop

Si Compteur > lavaleurChoisie

   Traitement
   exit do

sinon

   Compteur = 0

Fin_SI

loop

Walla. À savoir quel est le plus rapide xD
Mais ce qui est sur, c'est qu'avec ta méthode, c'est impossible de se tromper.
0

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

Posez votre question
sardonick Messages postés 7 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 16 août 2009
9 août 2008 à 20:51
Merci pour vos réponses rapides, je n'ai pas eu encore le temps, et j'ai du réinstaller excel parce qu'il me manquait utilitaire d'analyse et d'analyse VBA. Je vais m'y mettre dès demain. @+
0
sardonick Messages postés 7 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 16 août 2009
10 août 2008 à 11:16
Rebonjour,

Je n'y arrive pas non parce que la solution n'est pas bonne mais parce que je dois préalablement faire les opérations macro suivantes que je ne maîtrise pas.

1. j'ouvre un tableau excel.xls
2. depuis le tableau je met en route une nouvelle macro
3. j'ouvre un fichier tableau excel.csv
4. j'extrais du tableau excel.csv par une sélection une ligne de chiffres
5. je retourne au tableau excel.xls et j'insère une ligne vide
6. je fais un coller du contenu excel.csv extrait dans les lignes vides du tableau   
   excel.xls.

Logiquement je suppose que ce n'est pas faisable mais qu'il faut partir d'une progammation VBA extérieure à Excel.

Si vous avez un tuyau c'est avec plaisir que j'en prendrai connaissance.
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
10 août 2008 à 11:45
salut
 pour utiliser une macro VBA tu dois forcément être dans excel

 un fichier csv est un fichier texte il y a donc plusieurs façons possibles de l'importer dans excel
   quelque chose du genre :  Workbooks.Open Filename:="C:\Tonfichier.csv" doit en principe fonctionner
   ensuite tu n'as plus qu'à faire ton traitement

sinon tu as un moyen relativement simple quand tu ne sais pas comment écrire  un code
 tu ouvres excel sur un fichier vierge
 tu lances l'enregistruer de macros
 puis tu fais tes opérations manuellement
quand tout est fini tu arretes l'enregistreur de macro
dans l'IDE de VBA tu auras le code de la procédure que tu viens d'éxécuter (avec un certain nombres de lignes inutiles certes) parfaitement opérationnel
le seul défaut de l'enregistreur de macro c'est qu'il reproduit fidélement tes actions mais qu'il ne sait pas faire d'actions conditionnelles donc les boucles de test  et autres joyeusetés il te faudra quand meme les écrire

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
sardonick Messages postés 7 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 16 août 2009
11 août 2008 à 14:03
Salut pile_poil,

"quelque chose du genre :  Workbooks.Open Filename:="C:\Tonfichier.csv" doit en principe fonctionner"

J'ai parcouru le net et le en principe semble gravement compromis. Il semble que ce soit là un truc qui bouchonne tous les espoirs de progresser, tant il y a de questions sans réponses concluantes, au point que certains ce sont imaginés pouvoir vendre la solution...

Aussi ne t'étonne pas si je ne reponds pas durant un certain temps, c'est que je cherche...

@+
0
sardonick Messages postés 7 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 16 août 2009
12 août 2008 à 18:18
Salut à tous,

Après bien des transpirations, j'ai réussis à 99% à résoudre le problème du 
Workbooks.Open Filename:="C:\Tonfichier.csv"
J'ai juste un petit problème, au milieu de la macro après ActiveWorkbook.Close il me pose cette question:
Voulez vous enregistrer les modifications apportées à "*.txt" et je dois cliquer oui, manuellement.

J'ai essayé de mettre une macro pour faire fonctionner ma macro, mais dans le programme je n'ai trouvé de probant pour automatiser  cette réponse.
Est-ce qu'il existe un moyen pour automatiser la réponse oui ?

@+
0
sardonick Messages postés 7 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 16 août 2009
12 août 2008 à 19:03
Salut à tous,


J'ai essayé la formule de pile_poil, en l'intégrant à ma macro. Il y a un plus puisque je me retrouve effectivement dans la case vide, mais le nombre précédent + 1 n'y est pas copié. Quid  de la solution ?
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
15 août 2008 à 11:14
salut
pour ta premiere question :
"Workbooks.Open Filename:="C:\Tonfichier.csv"
J'ai juste un petit problème, au milieu de la macro après ActiveWorkbook.Close il me pose cette question:
Voulez vous enregistrer les modifications apportées à "*.txt" et je dois cliquer oui, manuellement. "

display.alert= false'ceci désactive les messages de excell mais vérifie la synthaxe exacte je te le cite de mémoire
Workbooks.Open Filename:="C:\Tonfichier.csv"
 et à la fin de ta macro tu mets
display.alert= true' pour réactiver les messages d'alerte dans le fonctionnement normal d'excel

pour la deuxieme :
LigneVide = Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("A" & LigneVide)=    Range("A" & LigneVide-1).value+1

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
Rejoignez-nous