Bienvenue sur les forums conseil & création · S'enregistrer

Se connecter automatiquement

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » insérer lignes · Envoyer le lien

Par Véronique Sarrot, le 09 Juil 2009, 12:28 Revenir en haut de page Répondre en citant

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 Répondre en citant

Salut,

Commence par mettre ton bout de code, n'ai pas peur, on ne mord pas Very Happy

Au moins, on saura où tu en est et où ça bloque Wink

@+++
Par Véronique Sarrot, le 28 Juil 2009, 08:15 Revenir en haut de page Répondre en citant

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 Répondre en citant

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 Wink

@+++
Par Véronique Sarrot, le 29 Juil 2009, 15:19 Revenir en haut de page Répondre en citant

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 Répondre en citant

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 Répondre en citant

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 Répondre en citant

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 Répondre en citant

ç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 Répondre en citant

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é Very Happy )

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 Wink

- 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 Répondre en citant

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 Répondre en citant

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 Rolling Eyes

@+++

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » insérer lignes · Envoyer le lien