Données à coller ne se fait pas au fur et mesure

Salut le forum

Le code du fichier joint devrais permettre le collage des informations au fur et à mesure mais je constate que tel n'est pas le cas.

En effet, le collage se fait à partir de C102 (1ère ce cellule de destination).

A chaque exécution de la macro, les données doivent être collées à la suite de la ligne non vide.

Actuellement lorsque j'exécute la macro, elle colle toujours au même endroit c'est à dire quelle colle sur la même plage.

J'ai cherché ce qui ne va pas en vain mais sans résultat.

Merci de me donner un coup de main svp.

Bonjour,

Normal...

If LigneVide < 101 Then LigneVide = 17 'commence le collage à la ligne 17

tant que tu n'aura pas au moins 101 ligne tu sera sur la ligne 17

If LigneVide < 17 Then LigneVide = 17 'commence le collage à la ligne 17

Comme ça .. ça ira mieux.

A+

EDIT:

Mais si tu veux à partir de la ligne 102...

If LigneVide < 102 Then LigneVide = 102 'commence le collage à la ligne 102

Salut Lermite

Merci pour votre réponse.

C'était une erreur de ma part et je viens de corriger.

Je constate toujours que malgré cela, il ne colle pas les données au fur et à mesure.

Normalement,après avoir collé les données à la ligne 17, s'il y'a collage encore, il doit coller à la ligne 18 maintenant et ainsi de suite.Ce qui n'est pas le cas : il colle toujours à la ligne 17 et non à la ligne suivante.

Merci de voir pourquoi.

For i = 2 To 4
.Cells(LigneVide, i + 1) = TB(i)
Next i

Avec cette boucle il n'y a jamais de données dans la colonne C (celle que tu teste pour la dernière ligne)

Faire ...

For i = 1 To 5
.Cells(LigneVide, i + 1) = TB(i)
Next i

A+


Mais il n'est pas nécessaire de passer par un tableau.

Private Sub CommandButton1_Click()
Dim LigneVide As Long, i As Integer

    If Application.WorksheetFunction.CountIf(Sheets("Base_donne").Range("B3:B" & Sheets("Base_donne").Range("B65536").End(xlUp).Row), TextBox1.Value) > 0 Then
        MsgBox ("Ce compte est déjà présent dans la feuille Base_donne")
        Exit Sub
    End If

'Avec la feuille de destination
    With Sheets("Base_donne")
        'selection de la première cellule vide
        LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row
        If LigneVide < 101 Then LigneVide = 17 'commence le collage à la ligne 17
        'Copie les données
        For i = 1 To 5
            .Cells(LigneVide, i + 1) = Me.Controls("TextBox" & i).Value
        Next i
    End With
End Sub
lermite a écrit :

Avec cette boucle il n'y a jamais de données dans la colonne C (celle que tu teste pour la dernière ligne)

Faites-vous allusion à cette partie du code :

LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row

Pour moi c'est la colonne B et plus precisement B102. A partir de la colonne B102 jusqu'à B...., s'il y'a doublons, pas de collage.

Merci

Ah oui...

En effet, le collage se fait à partir de C102 (1ère ce cellule de destination).

Tu n'est pas fort rigoureux dans tes exposés..

Mais le dernier code que j'ai rectifier devrait fonctionner.

A+

Merci Lermite

lermite a écrit :

Tu n'est pas fort rigoureux dans tes exposés

T'as raison sur ce sujet precis.

Y'a des parties du code que je n'avais pas compris(pour moi le collage se faisait à partir de B102 et non C102) donc ....

Mais avec vos explications je crois avoir compris.

De façon général, c'est le problème du next i qui m'embêtait parce que le collage se faisait toujours sur la meme ligne et ne prenait pas en compte les lignes suivantes.

Je vais tester le code que vous venez de m'envoyer (sans les TB) et vous revenir pour le resultat.

Encore pour votre aide

Salut Lermite

Je viens de tester le nouveau code mais le next i ne fonctionne pas.

Les données se collent toujours sur la meme ligne.

Je vous joint le nouveau fichier pour appreciation.

beh oui, mais tu devais sélectionner si ligne 17 ou ligne 102 ??

If LigneVide < 101 Then LigneVide = 17 'commence le collage à la ligne 17

mettre ????

If LigneVide < 17 Then LigneVide = 17 'commence le collage à la ligne 17

FINALEMENT ... tu veux commencre à quel ligne ??

Je souhaite commencer à la ligne 102 (B102).

Dans mon ficiher réel, voici ce que j'ai mis mais sans gain de cause :

If LigneVide < 101 Then LigneVide = 102 'commence le collage à la ligne 102

Merci

Tu te mélange les pinceaux avec tes TextBox

Tu met le nom dans le textBox5 et tu regarde s'il existe dans le TextBox1 à la colonne B ???

Bref, j'ai rectifier, voir ton classeur en retour.

Salut Lermite

Merci pour votre solution.

Elle marche bien.

Je m'excuse de t'avoir

Dans le but de bien comprendre, je souhaite que tu adaptes sans abuser de ton temps le code du fichier joint (cette methode ne passant pas par les TB()).

Aussi, j'ai du mal à bien interpreter cette partie du code :

If Application.WorksheetFunction.CountIf(Sheets("ETAT_COL").Range("D17:D" & LigneVide), Sheets("PARAMETRE").Range("AE7").Value) > 0 Then
            MsgBox ("Ce compte est déjà présent dans la feuille Etat_Col")

Dans le code du fichier joint, le collage commence à partir de la ligne 17 (C17).

Les données à copier se trouvent dans la feuille PARAMETRE (les 3 éléments en jaune).

Dans la colonne D, je souhaite pas avoir de doublon sur le numero de compte.

Toujours pour comprendre : je vois que le code du fichier joint, vous avez ajouté 1 à la fin de la valeurde Ligne (

LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row [b]+ 1[/b]

)

Dans d'autre situation, vous n'avez pas ajouté le 1 mais ca marche

LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row

)

Merci pour votre coaching que j'apprécie beaucoup.

N.B:j'avais commencé à bricoler le code du fichier joint mais j'arrive pas

Le premier code que tu comprend pas sert à contrôler si ce nom n'existe pas encore dans la liste.

le code..

LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row

Te renvoi la dernière ligne QUI N'EST PAS VIDE donc si tu veux ajouter une ligne faut mettre +1 , et sans ça tu écrit toujours sur la même ligne.

Dans ton nouveau classeur..

J'ai l'impression que tu veux remplir un récapitulatif et pas entrer de nouvelles données.

Change le classeur avec un exemple de la base de données que tu veux mettre en forme, sinon je vais t'arrangé ça pour tes 3 lignes et après ce sera à recommencer pour plusieurs lignes...

Réflechir.. Réflechir.. à ce que tu veux réellement

Ont en est déjà à la deuxième page et tu n'a pas encore bien déterminé ce que tu veux !!

Merci pour ton feedback.

T'inquiète pas je sais ce que je demande.

Je souhaite comprendre la logique du code et je pourrai l'adapter à mon cas réel.

Regarde par exemple ce code il fonctionne à merveil (next i pas de problème).

Sub Copier_Sesame()
Dim TB(6) As String
Dim LigneVide As Long, i As Integer
Sheets("PARAMETRE").Visible = xlSheetVeryHidden
'verification des identifiants

If Sheets("PARAMETRE").Range("AE7").Value = "" Then
MsgBox ("Manque le N° du compte")
Exit Sub
ElseIf Sheets("PARAMETRE").Range("AE13").Value = "" Then
MsgBox ("Le code utilisateur n'est pas renseigné")
Exit Sub
ElseIf Sheets("PARAMETRE").Range("AF7").Value = "" Then
MsgBox ("Le client ne veut pas de BSMS")
Exit Sub
ElseIf Application.WorksheetFunction.CountIf(Sheets("STATSESAME").Range("C3:C" & Sheets("STATSESAME").Range("c65536").End(xlUp).Row), Range("ae7").Value) > 0 Then
MsgBox ("Ce compte est déjà présent dans la feuille STATSESAME")
Exit Sub
End If
With Sheets("PARAMETRE")
'copie des cellules
TB(1) = .Range("ae6").Value 'date
TB(2) = .Range("ae7").Value 'nom_prenom
TB(3) = .Range("ae8").Value 'téléphone
TB(4) = .Range("ae9").Value 'n° compte
TB(5) = .Range("ae11").Value 'Réf pièce
TB(6) = .Range("ae13").Value 'code agent
End With

'Avec la feuille de destination
With Sheets("STATSESAME")
'selection de la première cellule vide
LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row
If LigneVide > 1 Then LigneVide = LigneVide + 1
'Copie les données
For i = 1 To 6
.Cells(LigneVide, i + 1) = TB(i)
Next i
End With
End Sub

Je rencontre des soucis lorsque cette partie du code doit varier

If LigneVide > 1 Then LigneVide = LigneVide + 1

Comme par exemple la 1ère ligne de destination 17 ou plus

dans ce cas j'ai l'impression que cette partie du code

If LigneVide < 17 Then LigneVide = 17

Si vous faites une comparaison entre les 2 parties des codes, y'a t-il pas de difference?

Voila pourquoi je vous demande de revoir le code de mon fichier joint precedemment.

Si vous le solutionner, soyez-en sûr que je vais pas vous deranger encore car j'aurai compris la logique.

Merci de le réaliser pour moi svp.

zombe a écrit :

Regarde par exemple ce code il fonctionne à merveil (next i pas de problème).

Puisque ça fonctionne à merveille je vois pas ce que je pourrais encore ajouté.

zombe a écrit :

Je rencontre des soucis lorsque cette partie du code doit varier.

Tout est dit dans mes postes précédant, faut juste que tu prenne la peine de les lire.

Et ça c''est vraiment du n'importe quoi...

If LigneVide > 1 Then LigneVide = LigneVide + 1

Réflechir.. Réflechir..

Regarde également dans les fichiers que j'ai posté

Ça sert à rien que je ré-ré-réééé-explique, apparemment tu lis pas.

A+

Salut Lermite

Merci pour ta precieuse aide.

J'ai pu me tirer d'affaire avec la somme de tes solutions et conseil.

Encore merci

Rechercher des sujets similaires à "donnees coller fait pas fur mesure"