Suppression ligne tableau et retour à la ligne tableau

Bonjour à tous

Je reviens vers le forum car j'ai un petit soucis, enfin même 2 pour l'instant

Le premier n'est pas bien compliqué mais je ne comprends pas comment faire. Le problème est simple, je veux supprimer la dernière ligne de mon Tableau1. J'ai donc écrit cette ligne :

Rows(Range("A" & Rows.Count).End(xlUp).Row).Delete

Cependant, ce code me supprime toute la dernière ligne A et pas seulement celle du Tableau1 (ce qui fait que je perds des données en qui sont en dehors du tableau =/ )

J'ai bien essayé ceci aussi :

Worksheets("Principale").ListObjects("Tableau1").ListRows(finB).Delete

avec finb défini comme étant la première ligne vide de la colonne "B" :

finB = .Range("B" & .Rows.Count).End(xlUp).Row  'première ligne vide de la colonne B

Mais sans succès aussi...

Concernant le deuxième soucis, j'ai crée un sub qui permet de séparer des noms s'ils sont séparés par un espace (sub separe())

Cependant, pour tester, j'affiche les résultats dans des cases en dehors du Tableau1 et jusqu'à là tout va bien mais quand je veux les incorporer dans la colonne "C" de mon Tableau1, je ne sais pas comment m'y prendre =/

Par exemple, je voudrai que les noms s'affiche comme ça, les uns à la suite des autres et sans remettre la date et l'heure à côté :

image

En fait mon plus gros soucis est de savoir comment me déplacer dans mon Tableau1...

Merci d'avance

PS : je vous envoie mon code en PJ

6test.xlsm (43.28 Ko)

Bonsoir,

Le premier n'est pas bien compliqué mais je ne comprends pas comment faire. Le problème est simple, je veux supprimer la dernière ligne de mon Tableau1. J'ai donc écrit cette ligne :....
Cependant, ce code me supprime toute la dernière ligne A et pas seulement celle du Tableau1 (ce qui fait que je perds des données en qui sont en dehors du tableau =/

Votre code comme ceci

Dim lig As Integer
With Sheets("Principale").ListObjects("Tableau1")
    lig = .ListRows.Count
    .ListRows(lig).Delete
End With

Crdlt

Bonjour Dan et merci pour votre réponse =)

C'est exactement ce que je cherchais pour mon premier soucis

Merci encore

Crdlt

Concernant le deuxième soucis, j'ai crée un sub qui permet de séparer des noms s'ils sont séparés par un espace (sub separe())

C'est quoi le but final ? Avoir une ligne pour chaque nom ?
exemple si vous entrez Jean Yves dans l'inputbox vous voulez avoir une ligne Jean et une ligne Yves ?

Que se passe-t-il si vous mettez un trait d'union entre les deux prénoms ou noms ?

Le but final est juste d'avoir le nombre de personne par jour et cette disposition permet de le voir rapidement.

Si on entre Yves Jean dans l'inputbox, il faudrait qu'en sortie il y ai Yves Jean d'inscrit dans une seule cellule.

Voici un exemple :

image

En fait, dans l'inputbox, il faudrait juste que lorsqu'on entre un séparateur (de type "," par exemple), le nom soit renvoyé à la ligne

Je sais pas si c'est plus clair ? ^^

Merci d'avance

En fait, dans l'inputbox, il faudrait juste que lorsqu'on entre un séparateur (de type "," par exemple), le nom soit renvoyé à la ligne
Je sais pas si c'est plus clair ? ^^

Heu.. non pas trop compris votre exemple.
Cela voudrait dire que vous pouvez entrer plusieurs noms différents ? Genre ceci jean Michel et dans ce cas vous voulez avoir les deux dans une même cellule ? Idem pour Yves jean ?
Je serais plutôt d'avis de mettre une virgule si vous n'en avez pas dans l'inputbox et ce, pour éviter de faire des retours à la ligne dans une même cellule. C'est souvent sujet à problème quand vous voulez par exemple faire l'inverse (supprimer les retours à la ligne par exemple)

C'est le code Separe qui fait cela dans votre projet ?

En fait dans une même inputbox, je rentre plusieurs noms comme ceci :

image

Et ensuite ils sont répartis comme ceci :

image

Est-ce plus compréhensible maintenant ?

Désolé je peux pas faire mieux la ^^

Je suis d'accord que ce n'est pas très appréciable de rentrer plusieurs noms comme ça à la suite mais pour l'instant c'est ce qui m'arrange le mieux =)

Oui le code Separe permet de faire cela (dans la dernière version j'ai juste remplacé cette ligne

Tableau = split(c, " ")

Par :

Tableau = split(c, ",")

Ok je comprends.
Si je reprends votre exemple, on rajoutera 4 lignes et dans chacun des lignes on y ajoutera 1 prénom

On ajoute rien d'autre dans chaque ligne créée ?

Bonjour Dan,

Oui c'est exactement cela, vous avez tout compris =)

Bonjour

Oui c'est exactement cela, vous avez tout compris =)

Alors essayez votre code comme ceci :

Sub separe()
Dim i As Integer
Dim c As String, d As String
Dim Tableau

With Sheets("Principale")
    c = InputBox("Quel est le personnel présent ?", "Personnel", "Entrer les noms")
    If c = vbNullString Then Exit Sub

    Do While c = vbNullString Or c = "Entrer les noms"
        d = MsgBox("Veuillez entrer au moins un nom", 48)
        c = InputBox("Quel est le personnel présent ?", "Personnel", "Entrer les noms")
        If c = vbNullString Then Exit Sub
    Loop

    Tableau = split(c, ",")

    For i = 0 To UBound(Tableau, 1)

        With .ListObjects("Tableau1")
            If .ListRows.Count = 0 Then
            .ListRows.Add: lig = 1
            Else: .ListRows.Add: lig = .ListRows.Count
            End If
            .DataBodyRange.Item(lig, 3) = Tableau(i)
         End With

    Next i
End With
End Sub

Cordialement

Bonjour Dan, c'est exactement ce que je cherchais =)

Merci pour votre aide

J'ai juste une dernière petite question, est ce que c'est possible de faire monter la ligne ci-dessous ?

image

C'est-à-dire mettre le "non" et la couleur devant le premier nom.

J'ai essayé de changé les lignes suivantes :

fin = .Range("D" & .Rows.Count).End(xlUp).Row  'première ligne vide de la colonne D
.Range("D" & fin).Interior.ColorIndex = 4
.Range("D" & fin).Value = "non"

en :

fin = .Range("D" & .Rows.Count).End(xlUp).Row  'première ligne vide de la colonne D
.Range("D" & fin - lig + 1).Interior.ColorIndex = 4
.Range("D" & fin - lig + 1).Value = "non"

Cela marche seulement la première fois et ensuite ça n'affiche plus rien...

Merci d'avance =)

Bonjour,

J'ai juste une dernière petite question, est ce que c'est possible de faire monter la ligne ci-dessous ?

Pour bien comprendre c'est mettre un NON à chaque ligne créée que vous voulez ou vous voulez avoir tous les NON au dessus ?

Les lignes que vous mentionnez sont où dans votre fichier ?

Crdlt

Rebonjour Dan,

C'est mettre un "NON" (ou un "OUI" en fonction de la réponse donnée par l'utilisateur mais une fois que le "NON" sera codé, je me débrouillerai pour le "OUI" ^^), juste devant le premier nom, comme ici par exemple :

image

Dans le code actuel, il rajoute une ligne à la fin comme ceci, ce qui ne m'arrange pas :

image

De plus, dans votre code, je me suis aperçus qu'une ligne apparaissait juste en dessous du denier nom :

image

Est-ce possible de la supprimer ? Car sinon cela fait un espace entre les données entrées par la suite.

Merci d'avance =)

Cordialement

1. C'est mettre un "NON" (ou un "OUI" en fonction de la réponse donnée par l'utilisateur mais une fois que le "NON" sera codé, je me débrouillerai pour le "OUI" ^^), juste devant le premier nom, comme ici par exemple :

Dans le code "sépare", juste en dessous de la ligne .DataBodyRange.Item(lig, 3) = Tableau(i) ajoutez la ligne ci-dessous

If i = 0 Then .DataBodyRange.Item(lig, 4) = "NON"

2. Dans le code actuel, il rajoute une ligne à la fin comme ceci, ce qui ne m'arrange pas.... De plus, dans votre code, je me suis aperçus qu'une ligne apparaissait juste en dessous du denier nom :

Non le code "separe" ne rajoute pas de ligne. C'est dû au fait que votre bouton "Ajout Ligne" sur la feuille est lié à votre code "ajout ligne" qui ajoute une ligne vide sans rien mettre dans votre feuille. Faites ceci :
1. Supprimez le code "ajoutLigne"
2. Remplacez le nom "separe" par "ajoutLigne"

Bonjour Dan,

Tout marche nickel, je vous remercie =)

Crdlt

Rechercher des sujets similaires à "suppression ligne tableau retour"