| Par Véronique Sarrot, le 09 Juil 2009, 12:28 |
Revenir en haut de page |
|
Bonjour!
Je reviens vous voir pour un autre problème:
je voudrais parcourir une colonne, et à chaque fois que je trouve une cellule non vide, insérer une ligne juste en dessous. Oui, je sais, c'est special comme idée !!
Ca, c'est pour la version simple, le fin du fin serait de déplacer la valeur de la cellule non vide dans la ligne insérée, quelques colonnes avant, mais c'est largeemnt au delà de mes capacités !!
J'ai commencé à balbucier un code, mais j'ose même pas le mettre tellement il doit y avoir d'erreur de syntaxe et autres ...
si vous pouvez m'aider ... |
|
 |
| Par Horny, le 27 Juil 2009, 18:38 |
Revenir en haut de page |
|
Salut,
Commence par mettre ton bout de code, n'ai pas peur, on ne mord pas
Au moins, on saura où tu en est et où ça bloque
@+++ |
|
 |
| Par Véronique Sarrot, le 28 Juil 2009, 08:15 |
Revenir en haut de page |
|
Salut!!
C'est bien sûr, vous ne mordez pas??? Bon, alors je me lance ...
| Code: | i As Integer,
Dim last_Ligne As Byte
last_Ligne = Range("A500").End(xlUp).Row
For i = 1 To last_Ligne
Select Case Cells(i, 10).Value
If ActiveCell.Value = ISBLANK Then
Else: Selection.EntireRow.Insert
End If
End Select
Next i |
vous remarquerez que pour le début, je me suis largement inspirée de mon post précédent ...
mais bien sûr, ça ne marche pas, j'ai essayé plein de façons différentes, j'ai pas réussi à entrer la condition "si case vide", ou plutôt "non vide"!
alors docteur, c'est grave ?? |
|
 |
| Par Horny, le 28 Juil 2009, 16:24 |
Revenir en haut de page |
|
Salut,
De mémoire (je n'ai pas Excel sur mon PC), pour les celulles vides, c'est xlBlank, mais on peut aussi faire par:
| Code: |
If ActiveCell.Value = "" Then
|
Cela étant, il y a un autre gros problème: c'est soit Select Case, soit des If, mais tu ne peux pas combiner les 2 comme ça.
Ce qui donne, avec Select Case:
| Code: |
Select Case Cells(i, 10).Value
Case is = ""
'la cellule est vide
Case else
'la cellule n'est pas vide
End Select
|
Ou avec If:
| Code: |
If Cells(i, 10).Value="" Then
'la cellule est vide
Else
'la cellule n'est pas vide
End If
|
Essaye déjà de modifier ton code avec ça, et n'hésite pas s'il y a autre chose qui pose problème
@+++ |
|
 |
| Par Véronique Sarrot, le 29 Juil 2009, 15:19 |
Revenir en haut de page |
|
tu vois, je t'avais bien dis qu'il y avait plein de problèmes !!!
j'ai fais les modif, et il ne se passe rien !! Sniff !
apparemment, d'après le débogage, il y aurait un problème dès la définition de last_Ligne, mais là, je vois vraiment pas ...
je ne suis pas sûre non plus de la commande "Selection.EntireRow.Insert" , d'autant plus que je voudrais que la ligne sois insérée en dessous ...
je crois que j'ai encore besoin d'un petit peu d'aide ... |
|
 |
| Par Horny, le 02 Aoû 2009, 19:21 |
Revenir en haut de page |
|
Salut,
Remplace le début de ta macro
| Code: | i As Integer,
Dim last_Ligne As Byte |
par
| Code: | | Dim i As Long, last_Ligne As Long |
Ca devrait aller mieux (As Byte te limite à 255 lignes)
@+++ |
|
 |
| Par Véronique Sarrot, le 03 Aoû 2009, 14:38 |
Revenir en haut de page |
|
Salut,
ça va en effet mieux, mais j'ai encore des problèmes...désolée
avec "select case" je vois que la macro parcourt la colonne, mais il n'y a pas d'insertion de ligne.
avec "if " j'ai testé sur 2 tableaux :
- sur une copie d'un "vrai fichier" : là ça marchait mis à part que les lignes étaient insérées au dessus et mon au dessous ( ce qui fait que la macro insère toujours des lignes au même endroit),
- et sur une page vierge sur laquelle j'avais entré au pif des caractères dans la colonne correspondante : et là il ne s'est rien passé !
j'ai vraiment du mal à comprendre ce qui se passe , et pourquoi ça ne marche pas dans tous les cas !
désolée aussi de pas répondre vite, mais je suis souvent sur le terrain ces temps-ci !! |
|
 |
| Par Horny, le 03 Aoû 2009, 17:52 |
Revenir en haut de page |
|
Salut,
Je n'ai pas Excel sur mon PC, alors je vais essayer de faire ça de tête, sans rien oublier...
On y va:
| Code: |
Dim i As Long, Last_Line As Long 'Long pour ne pas être gêné par le nombre de lignes
Last_Line = Range("A65536").End(xlUp).Row
For i = 1 to Last_Line
If Cells(i, 10).Value = "" Then
'La cellule de la colonne J est vide
'On ne fait rien et on passe à la suivante
Else
'La cellule de la colonne J n'est pas vide
Cells(i + 1, 10).EntireRow.Insert 'On insère la ligne en dessous, soit au-dessus de la ligne suivante (i + 1)
'Il faut tester avec Rows(i + 1).Insert, cela simplifierai la ligne de code
End If
Next i
|
Cela devrait marcher. Attention car d'après l'exemple que tu avais mis (et que j'ai donc repris), tu cherche la dernière ligne à partir de la colonne A, mais tu fait la recherche de cellules non vides dans la colonne J (c'est sans doutes pour ça que le test sur une feuille vierge ne marchait pas)
@+++ |
|
 |
| Par Véronique Sarrot, le 07 Aoû 2009, 12:58 |
Revenir en haut de page |
|
ça y est, ça marche !!!!!!!!!! et avec les deux fonctions !
merci beaucoup et bravo de l'avoir fait de tête ! Serais-tu en vacances ? Ca augmente encore ton mérite ...
sinon, comment faire pour trouver ces fonctions et avoir la syntaxe
sans être obligée de vous déranger ? |
|
 |
| Par Horny, le 07 Aoû 2009, 17:14 |
Revenir en haut de page |
|
Salut,
Non, je ne suis pas en vacances, mais je ne peux pas réponse sur le forum depuis le boulot (là où j'ai Excel... oui, c'est compliqué )
| Citation: | sinon, comment faire pour trouver ces fonctions et avoir la syntaxe
sans être obligée de vous déranger ? |
Il y a plusieurs moyens:
- enregistrer une macro: cela permet d'avoir les grandes lignes de ce qu'on veut faire, il faut ensuite simplement modifier le code pour rajouter des boucles et des conditions. Cela permet aussi de trouver le nom d'une fonction qu'on ne connais pas (par exemple, Cells().EntireRow.Insert)
- chercher sur internet: il y a souvent des petits morceaux de code communs à plusieurs programmes: par exemple, détecter si un classeur est ouvert et s'il ne l'est pas, l'ouvrir... pas la peine de réinventer la roue
- l'aide de VBA est assez bien faite (F1), l'auto-complétion (ctrl+espace) aussi. Avec l'auto-complétion, on peut avoir la liste de tout ce qu'il est possible de faire avec un objet, et l'aide permet ensuite de savoir quels sont les arguments à renseigner (par exemple, pour Cells, c'est la ligne puis la colonne)
@+++ |
|
 |
| Par Véronique Sarrot, le 24 Aoû 2009, 08:50 |
Revenir en haut de page |
|
Salut !!
En fait, j'avais utilisé en partie les moyens que tu m'as cités !!
En enregistrant des macros je suis tombée sur des fonctions qui n'étaient pas les bonnes (celles que tu as vues et que tu m'as corrigées). J'ai aussi passé de longs moment à chercher sur internet, avant de me résoudre à la solution forum! Mais c'est vrai que je n'ai pas utilisé à fond l'aide ...
Je me demandais s'il n'existais pas des tutoriels ou documents pour débutants. |
|
 |
| Par Horny, le 24 Aoû 2009, 17:19 |
Revenir en haut de page |
|
Salut,
| Citation: | | Je me demandais s'il n'existais pas des tutoriels ou documents pour débutants. |
Le problème, c'est que tout le monde ou presque a des feuilles différentes, avec des fonctions et des buts différents... Cela étant, des fonctionnalités reviennent souvent, et on trouve facilement des solutions sur Internet... parfois en anglais
@+++ |
|
 |