Autres Macro trouve la dernière ligne et copier/coller valeurs en écrasant les formules...

Christian0258

XLDnaute Accro
Bonjour à tout le forum,
Pourriez-vous me dire, pourquoi cette macro ne fonctionne pas ?
Ce que je souhaite :
j'ai un tableau AB:AW qui contient données issues de formules.
Je voudrais que la macro trouve la dernière ligne renseignée, quelle la copie, quelle l'éfface et quelle colle les valeurs sur cette même ligne…
Merci pour votre aide.
Bien amicalement,
Christian
la macro:
Sub CopierDernièreLigne()
Copie la dernière ligne du tableau AB:AW
ActiveCell.Offset(1, 0).Rows("28:49").EntireRow.Copy
effacement des données de la ligne copiée
Selection.ClearContents
Collage des VALEURS de la ligne copiée
Range("AB65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
End Sub
 

jmfmarques

XLDnaute Accro
Bonjour
J'ai en ce qui me concerne des difficultés à comprendre la corrélation entre les deux lignes de ce code
VB:
Copie la dernière ligne du tableau AB:AW
ActiveCell.Offset(1, 0).Rows("28:49").EntireRow.Copy

Quoi qu'il puisse en être, ni l'on veut transformer en constantes les résultats des formules d'une plage (ici Range("A1:C3") pour l'exemple) , on le fait directement, ainsi
VB:
range("A1:C3").value = range("A1:C3").value
 

Christian0258

XLDnaute Accro
Re, le forum, jmfmarques

Merci pour ton aide. Je ne suis pas doué en VBA, cette macro est une "bidouille" qui ne fonctionne pas, c'est pourquoi je fais appel à vous les spécialistes.
Je vais essayer d'expliquer la chronologie des actions;

1) j'ouvre un USF pour faire des saisies

2) lorsque je valide les saisies dans un tableau Col A:Z, la colonne A ainsi renseignée, place des formules col AB;AW qui affichent des résultats. (les formules sont donc mises au fil des saisies)

3) Je souhaite intégrer dans le code de l'USF , à la fin, Call CopierDernièreLigne , pour transformer cette dernière ligne ainsi valider par l'USF en ligne de valeurs, donc en effaçant les formules.

En espérant avoir été clair.
Bien à vous,

Christian
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour le fil
j'ajouterais que ceci:
ActiveCell.Offset(1, 0).Rows("28:49").EntireRow.Copy
serait jouer au pendu
non seulement activcell n'a qu'une seule ligne alors chopper la 28 à 49 fait de toi qu'elqu'un de magique
mais en plus qui dit que activecell démarre au moins a la ligne 28

bref cette ligne ne veux rien dire
 

Christian0258

XLDnaute Accro
Re, le forum jmfmarques, patricktoulon,

Comme je vous l'ai déjà dit, je sui nul en vba, donc avant vous déranger, j'essaye de me débrouiller mais quand je n'y arrive pas...je vous appelle.

Je trouve que vos petites remarques ; "est donc ta seule affaire" ou "fait de toi qu'elqu'un de magique" ou "bref cette ligne ne veux rien dire" ne sont pas très gentilles et ne m'apporte rien...

Bien à vous,
Bonnes Pâques
Christian
 
Dernière édition:

jmfmarques

XLDnaute Accro
ne sont pas très gentils et ne m'apporte rien...
Il ne s'agit pas de "gentillesse" ou de son contraire ...
Le problème est que l'on n'est tout simplement pas en mesure de t'aider, sans autres explications très complètes, en ce qui concerne cet aspect-là.
Ton code se base de surcroît sur une "cellule active". Laquelle ?
en vue de déterminer (selon quelle règle ?) une plage à copier.
Et traite au passage une "sélection" dont on ignore ce qu'elle est.
A part tenter de réparer nos boules de cristal (et d'y parvenir), je vois très mal comment t'être d'un vrai secours dans de telles conditions.
Désolé, mais là ...
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Christian0258, Roblochon, patricktoulon, jmfmarques

•>Christian0258,
Test OK sur mon fichier de test
VB:
Private Sub CommandButton1_Click()
With Cells(Rows.Count, 1).End(3)(2)
    .Value = TextBox1 'juste pour le test
    .Resize(, 26) = .Resize(, 26).Value
End With
End Sub
EDITION: Pour tester
(1 feuille vierge + 1 userform avec un TextBox et un CommandButton)
Et cette macro pour la mise en situation
VB:
Sub créerTest()' Macro qui ne sert juste qu'à créer des données fictives
'Ce n'est donc pas une solution à la question, mais une macro pour tester
'le code plus haut dédié au CommandButton
[A1] = 1: [A1:A27].DataSeries
[B1:Z50] = "=ROW()*COLUMN()&""-""&ADDRESS(ROW(),COLUMN(),4)"
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Remplaces la macro du CommandButton par celle-ci
VB:
Private Sub CommandButton1_Click()
Dim Test As Boolean
With Cells(Rows.Count, 1).End(3)(2)
    .Value = TextBox1 'juste pour le test
    .Resize(, 26) = .Resize(, 26).Value
    Intersect(ActiveSheet.UsedRange, .Resize(, 26)).Interior.Color = 255
    Test = .Offset(, 1).HasFormula
    MsgBox .Offset(, 1).Address & Chr(13) & "contient une formule? " & Test & Chr(13) & .Offset(, 1)
    Test = .Offset(-1, 1).HasFormula
    MsgBox .Offset(-1, 1).Address & Chr(13) & "contient une formule? " & Test & Chr(13) & .Offset(-1, 1).FormulaLocal
    .EntireRow.Delete
End With
End Sub
Est-ce que cela éclaire plus ta lanterne? ;)

PS: Merci d'avoir pris le temps d'implémenter mon exemple et de l'avoir testé.
 

Staple1600

XLDnaute Barbatruc
Re

Si tu lances d'abord la macro créerTest()
Tu vois que la plage de cellule B1:Z50 contient des formules
test OK?
Maintenant tu affiches l'userform, tu saisis une valeur dans le TextBox et tu cliques sur le CommandButton
(puis tu cliques sur la croix pour fermer l'userform)
La valeur saisie dans le Textbox ira se mettre en A28 (soit dans l'exemple la première cellule vide en colonne A)
Et si tu regardes les autres cellules sur cette ligne 28
(donc en B28:Z28), tu verras qu'il n'y a plus les formules, mais les valeurs seules.
test OK ?
 

Discussions similaires