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 17tant 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 17Comme ç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 102Salut 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 iAvec 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 iA+
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 Sublermite 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).RowPour 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 17mettre ????
If LigneVide < 17 Then LigneVide = 17 'commence le collage à la ligne 17FINALEMENT ...
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 102Merci
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).RowTe 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 SubJe rencontre des soucis lorsque cette partie du code doit varier
If LigneVide > 1 Then LigneVide = LigneVide + 1Comme 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 = 17Si 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é.
Tout est dit dans mes postes précédant, faut juste que tu prenne la peine de les lire.zombe a écrit :Je rencontre des soucis lorsque cette partie du code doit varier.
Et ça c''est vraiment du n'importe quoi...
If LigneVide > 1 Then LigneVide = LigneVide + 1Ré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