Copier en valeurs une plage sous une autre plage

Résolu/Fermé
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 - 2 oct. 2014 à 10:18
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 - 7 oct. 2014 à 17:24
Bonjour,

Je débute sous VBA, et après avoir un peu testé par-ci par-là des combines, j'aimerais en apprendre encore plus.

Je me casse la tête en ce moment pour créer une macro qui copie une plage d'une feuille sur une autre feuille (copier/coller en valeurs) mais en-dessous de la plage précédente occupée. C'est pour créer un historique des données.

J'ai repéré des macros qui me conviennent bien sur le forum mais ne font pas exactement ce que je veux. Pouvez m'aider en me présentant et m'expliquant un code? Vu que je débute avec VBA je ne connais même pas le language VBA :S


Voici sur quoi je me base tout essayant de l'adapter (merci ccm81).

Public Sub BC1()  
Dim i As Integer, derlig As Long
With Sheets("feuil1")
For i = 1 To 10
If Not IsEmpty(.Range("F" & i)) And .Range("B" & i).Value = "" And .Range("C" & i).Value = "" Then
derlig = Sheets("feuil2").Range("A65536").End(xlUp).Row + 1
.Rows(i).Copy Sheets("feuil2").Range("A" & i)
End If
Next i
End With
End Sub




Je vous remercie pour votre aide,



Koala


3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 742
2 oct. 2014 à 10:25
Bonjour,

Voici ton code commenté et corrigé :
Public Sub BC1()  
'variables
Dim i As Integer, derlig As Long  
'ici on travaille dans la feuille Feuil1 => feuille concernée par le "copié"
With Sheets("feuil1")  
  'concerne les lignes de la Feuil1 de 1 à 10
  For i = 1 To 10  
    'si, dans ces lignes F n'est pas vide, B = "" (égale rien), C = "" Alors
    If Not IsEmpty(.Range("F" & i)) And .Range("B" & i).Value = "" And .Range("C" & i).Value = "" Then  
      'derlig est une variable qui va contenir le numéro de la première ligne vide de la feuil2 colonne A (là ou on va coller)
      derlig = Sheets("feuil2").Range("A65536").End(xlUp).Row + 1  
      'Copié - collé
      .Rows(i).Copy Sheets("feuil2").Range("A" & derlig)  'j'ai remplacé i par derlig (ou coller les données)
    End If  
  Next i  
End With  
End Sub

0
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 2
2 oct. 2014 à 14:16
Yes, merci!

Je vais tester ça cet après-midi.

En tout cas c'est devenu bien plus clair comme ça.


C'est toujours mieux de savoir exactement ce qu'on est entrain de coder plutôt que de bêtement recopier! ^^



Koala
0
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 2
Modifié par Koalacid le 7/10/2014 à 15:02
Heelo,

Je m'excuse du retard, j'ai été assez pris ces derniers temps.

Lorsque j'exécute la macro, elle me renvoie un message sur la ligen de code qui ne fonctionne pas (surlignée en jaune).

Cette partie:

derlig = Sheets("feuil2").Range("A65536").End(xlUp).Row + 1

J'ai pourtant changé le nom de la feuil2 en Histo.

Je ne vois pas ce qu'il y a d'incorrect.

Merci encore

Cordialement,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 742
7 oct. 2014 à 15:08
Salut,

Quel est le message d'erreur?
0
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 2
7 oct. 2014 à 15:16
Alors je viens d'arriver à supprimer le message d'erreur, donc je ne peux plus te dire.

Par contre la macro n'enclenche le copier/coller que d'une seule ligne. Coment pourrais-je sélectionner tout une plage depuis la cellule A6 à la cellule BQ19?

Je suis perdu dans le code que tu m'as donné, à quel moment tu as saisi les info pour que la macro choisisse telle ou telle ligne?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 742
Modifié par pijaku le 7/10/2014 à 15:56
For i = 1 To 10 'va boucler de la ligne 1 à la ligne 10
 


For i = 6 To 19 'va boucler de la ligne 6 à la ligne 19
0
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 2
7 oct. 2014 à 16:09
D'accord.

Et les lignes:

For i = 1 To 10  
'si, dans ces lignes F n'est pas vide, B = "" (égale rien), C = "" Alors
If Not IsEmpty(.Range("F" & i)) And .Range("B" & i).Value = "" And .Range("C" & i).Value = "" Then
'derlig est une variable qui va contenir le numéro de la première ligne


Ce sont les tests pour savoir s'il peut prendre ces lignes et les copier.
Je comprend ces lignes de code comme ça:
Si la colonne F n'est pas vide et que les colonnes B et C sont égales à rien, alors la macro copie les lignes 1 à 10.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 742
7 oct. 2014 à 16:09
C'est ça. Tout à fait.
0