Macros Excel - Aide demandée

  • Auteur de la discussion veronique_cdpdj
  • Date de début

veronique_cdpdj

Nouveau membre
Bonjour,

J'ai un gros document dans Excel et je voudrais ajouter à ma macro une commande pour :

1) Effacer les lignes vides
2) Faire écrire une numérotation automatique dans la première cellule de chaque ligne en arrêtant à la fin de mon document.

Merci !
 

zeb

Modérateur
Faut-il donc le faire pour toi ?

Se demander ce qu'est une ligne vide. Comme en math, on peut prendre la définition à la lettre, ou raisonner par l'absurde.
- une ligne vide au sens trivial. (chiant à vérifier)
- une ligne qui contient quelque chose dans la colonne C n'est pas vide. (facile), mais pour ça, il faut être sûr que la colonne C est obligatoirement renseignée.


Quelques pistes :

Effacer une ligne :
Code:
Rows("N:N").Delete Shift:=xlUp
où N est le numéro de la ligne à supprimer.

Récupérer le numéro de la ligne courante:
Code:
=LIGNE()
Donc pour "s'arrêter de compter", mettre une condition pour savoir si la ligne est vide ( cf ci-dessus ). Ex:
Code:
=SI(B7="";LIGNE();"")
 

veronique_cdpdj

Nouveau membre
En fait, pour ce qui était d'effacer des lignes, ça va mais je veux effacer des lignes vides qui se sont pas toujours les mêmes d'un document à l'autre. C'est vrai que ma question n'était pas claire (j'étais un peu pressée je crois...)

Ce que je veux faire en fait, c'est effacer une ligne si elle ne contient aucune information. Et je veux que ça arrête quand j'arrive à la fin de mon document. Je vais essayer avec le code que vous venez de me donner. Merci de votre aide.
 

zeb

Modérateur
Dis-moi tu ;)

Il faut te créer une fonction qui détermine si une ligne est vide, et aussi que tu définisses ce que signifie "fin du document". En effet, une feuille excel contient 65536 lignes. Et tu risques d'avoir pas mal de lignes vides vers le bas :D
 

veronique_cdpdj

Nouveau membre
J'essaie tout ça et je te donne des nouvelles. Je suis bien contente de parler avec qqn qui s'y connait. C'est la première fois que je viens sur un Forum pour ce genre d'info...
 

zeb

Modérateur
Mais tous les forums sont pleins de gens de bonne volonté.

Tu trouveras ici toute l'aide possible juste en montrant toi aussi ta bonne volonté : <<j'ai fait ci, j'ai tenté ça, ça ne marche pas :( voici un bout de code (entre les balises [ CODE ]), etc>>
 

veronique_cdpdj

Nouveau membre
Allô encore !

J'essaie mais je n'arrive pas à faire fonctionner la formule. Comme programme-t-on une boucle ?
 

veronique_cdpdj

Nouveau membre
Est-ce que je pourrais t'envoyer un exemple de mon fichier ? Comme ça, si tu peux m'aider, ce serait plus facile (et j'apprécierais beaucoup mais si tu n'as pas le temps, je comprends aussi... )

J'essaie et je suis en train de me rendre folle !! Rien ne fonctionne comme je veux. Je me demande même si c'est possible de faire ce que j'essaie de faire !
 

paponpon

Habitué
Salut!

Si tu veux pas passer par du code, tu peux le faire "a la main" s'il n'y a pas trop de lignes vides

pour repérer les lignes vides, tu appuies une fois sur "Fin" (sur le clavier), et flèche vers le bas. Le curseur s'arretera avant la cellule vide. Tu recommence jusqu'à la fin de ton doc. ça marche avec fin + n'importe quelle flèche pour le sens de déplacement

pour la numérotation auto (une fois les lignes supprimées)
tu tapes 1 sur ligne 1, 2 sur ligne 2, tu sélectionne les 2 cellules, tu met la souris sur le ptit carré en bas à droite et tu fait un cliquer glisser vers le bas jusqu'à la fin du doc. Excel va auto incrémenter.
OU
1 sur la 1ere ligne, "=A1+1" sur la 2e et copier vers le bas jusqu'à la fin du doc. cette solution évite de renuméroter si tu enlève des lignes
 

paponpon

Habitué
suis je bete :sweat:

tu peux trier les lignes de ton classeur pour regrouper les lignes vides, les virer, puis les re-trier dans le bon ordre ensuite!
 

zeb

Modérateur
Non, Véronique, je veux bien passer beaucoup de temps sur le forum, mais rien en privé. C'est par principe. Tu peux publier les parties difficiles de ton code ici. Et comme je ne possède pas la vérité unique, d'autres peuvent aussi t'aider, comme Paponpon, tu vois.

Pour une boucle, utilise FOR..TO..NEXT.
Exemple de boucle :
Code:
Option Explicit

function LigneEstVide ( Ligne as Integer ) as Boolean
	Dim i as Integer
	
	LigneEstVide = True
	For i = 1 to 256
		If Cells ( L, i ).Formula <> "" Then
		  LigneEstVide = False
		  Exit Function
		End If		
	Next	
End Function
Devine ce que fait la fonction !
 

veronique_cdpdj

Nouveau membre
C'est loin toutes ces connaissances... En plus, c'est plus en C++ que j'ai appris qu'en VB... Merci beaucoup de l'aide à tous les deux. Ça avance... Ma directrice va être contente si je réussi ce coup de force... Bien sûr, je lui ai dit que je ne suis pas seule sur ce problème !! Quand je vais réussir, je vais mettre le code ici pour référence à d'autres.
 

veronique_cdpdj

Nouveau membre
J'ai réussi en partie...

[cpp]
'Formule SI cellule n'est pas un chiffre ou est vide
Range("C12").Select
ActiveCell.FormulaR1C1 = _
"=IF(OR(R[-1]C[-2]="""",ISNUMBER(R[-1]C[-2])),"""",R[-1]C[-2])"
Range("C13").Select
[/cpp]

Je voudrais copier cette formule dans toutes les cellules jusqu'à la fin de mon document (qui change évidemment de longueur !)

J'ai essayé avec la boucle mais je dois manquer de logique...
 

veronique_cdpdj

Nouveau membre
Merci de votre aide. Je n'ai pas réussi ce que je voulais faire mais c'est accepté comme ça.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 825
Membres
1 586 367
Dernier membre
ramkin
Partager cette page
Haut