Inserer des lignes et copier des données entre deux tableaux automatiquement

bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007 - 28 juil. 2007 à 14:25
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007 - 13 août 2007 à 23:57
Bonjour,
j'ai besoin  d'un conseil pour inserer des lignes et copier des donner automatiquement

sur ma feuille de calcul j'ai deux tableaux l'un en dessous de l'autre séparés par des lignes vide
exemple :

                        Colonne A                               Colonne B

Ligne 1:     Nombre de voiture                                 2
Ligne 2:
Ligne 3:               Voiture 1                                      1                           Tableau 1
Ligne 4:               Voiture 2                                      2  
Ligne 5:
Ligne 6:
Ligne 7:               Vélo 1                                           1                           Tableau 2
Ligne 8:               Vélo 2                                           2 
Ligne 9:               Vélo 3                                           3
Ligne 10:             Vélo 4                                           4
Ligne 11:

j'aimerais qu en changant le nombre en B2, des lignes se rajoutent ou se supriment en copiant les données (voiture 1,voiture 2.....) en meme temps et sans affecter le tableau du dessous

exemple : si a la place du 2 je saisie un 6 en B2 je voudrais obtenir le resultat suivant:

                         Colonne A                               Colonne B

Ligne 1:     Nombre de voiture                                  6
Ligne 2:
Ligne 3:               Voiture 1                                       1
Ligne 4:               Voiture 2                                       2  
Ligne 5:               Voiture 3                                       3 
Ligne 6:               Voiture 4                                       4
Ligne 7:               Voiture 5                                       5
Ligne 8:               Voiture 6                                       6  
Ligne 9:               
Ligne 10:             
Ligne 11:              Vélo  1                                          1 
Ligne 12:              Vélo  2                                          2
Ligne 13:              Vélo 3                                           3
Ligne 14:              Vélo 4                                           4
Ligne 15:

Les lignes en rouge on été ajoutées et les données on été actualisées automatiquement :

a l'inverse si je reduis le nombre en B2  exemple: je tape 1

les lignes (en rose)  s'effaces

                         Colonne A                               Colonne B

Ligne 1:     Nombre de voiture                                  1
Ligne 2:
Ligne 3:               Voiture 1                                       1
Ligne 4:               Voiture 2                                       2  
Ligne 5:               Voiture 3                                       3 
Ligne 6:               Voiture 4                                       4
Ligne 7:               Voiture 5                                       5
Ligne 8:               Voiture 6                                       6  
Ligne 4:               
Ligne 5:             
Ligne 6:              Vélo  1                                          1 
Ligne 7:              Vélo  2                                          2
Ligne 8:              Vélo 3                                           3
Ligne 9:              Vélo 4                                           4
Ligne 10:

en resumé la cellule B2 doit determiner le nombre de ligne et actualiser les données en fonction du nombre saisie

j'espere avoir été clair dans mes explications,

pourriez vous me dire si cela est realisable et me conseiller sur la procedures

Merci d'avance

17 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 juil. 2007 à 16:08
Dans l'événement _Change() de ta feuille, tu dois vérifier le chiffre entré en B2. Sinon, tu utilises un bouton pour démarrer la macro.

Ensuite, tu boucles tes lignes de 3 à la fin (For I = 3 To DerniereLigne ... Next)

S'il manque des lignes en vérifiant les données des cellules en Aà l'aide d'un compteur, tu insères une ou des lignes
voir Rows(i).Insert


S'il y en a trop, tu effaces ces lignes
voir Rows(i).Delete

Et si tu es débutant, ce ne sera pas simple, donc prend bien le temps de lire l'aide sur ces mots... en gras...

MPi
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
29 juil. 2007 à 23:23
bonsoir MPI, merci d'avoir répondu à mon message, je ne comprends pas tous les codes que tu as ecri car je suis débutant

l'evenement change () me permet defaire demarrer la macro via la cellule B2
Rows(i) c le code pour inserer ou effacer les lignes
La boucle for next ça me donne le nombre de ligne
 
mais pour que les données s actualisent automatiquement quel code dois je marquer dans la macro ?

merci beaucoup pour tes conseils

A+
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 juil. 2007 à 11:55
Commence par lire l'aide sur les mots en gras que je t'ai mis.

Rows(i) est la ligne qui est vérifiée dans la boucle For i= 3 to nbLignes
(nbLignes étant une variable dont il faut déterminer la valeur)

Insérer =>   Insert
Effacer =>   Delete

MPi
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
30 juil. 2007 à 13:55
bonjour,

j'ai lu l'aide excel de la commande evenement change ça donne cela

Cet événement se produit lorsque les cellules de la feuille de calcul sont modifiées par l'utilisateur ou par un lien externe.

Syntaxe

PrivateSubWorksheet_Change(ByValTargetAsRange)

Target   La plage modifiée. Il peut s'agir de plusieurs cellules.

Remarques

Cet événement ne se produit pas lorsque les cellules sont modifiées par un recalcul. Utilisez l'événement Calculate pour piéger le recalcul d'une feuille de calcul.

La suppression de cellules ne déclenche pas cet événement.

mais je ne sais pas comment l'utiliser
comment faire pour apliquer le code a la cellule B2 ?????
que dois je mettre pour la valeur target ?

bobob83
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
30 juil. 2007 à 14:35
Salut,

Target est une variable définie par l'évènement change. Ce n'est donc pas à toi de "mettre une valeur".

Par exemple tu peux déjà tester si le cellule modifiée sur ta feuille est la B2 ou non:

Private Sub Worksheet_Change(ByVal Target As Range)
'Tester si la cellule modifiée est bien la cellule B2
If Target.Address(False, False) = "B2" Then
'Ta macro ici
End If
End Sub

Tubafat
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
30 juil. 2007 à 19:03
Bonsoir Tubafat merci pour ta réponse

j'ai copier collé le code que tu m as donné

Private Sub Worksheet_Change(ByVal Target As Range)
'Tester si la cellule modifiée est bien la cellule B2
If Target.Address(False, False) = "B2" Then
'Ta macro ici
End If
End Sub

mais quand je lance la macro il y a une erreur de compilation End sub attendu
Pouquoi ?

 je voulais teser avec se code pour mettre une couleur dans la cellule

Private Sub Worksheet_Change(ByVal Target As Range)
'Tester si la cellule modifiée est bien la cellule B2
If Target.Address(False, False) = "B2" Then
'Ta macro ici
Range("D10").Select
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
End If
End Sub

dans le cas ou le code fonctionne comment faire pour que les cellules en dessous de D10 se colore en fonction du nobre saisie en B2

Exemple : si je saisie 2 en B2 les cellules D10 et D11 sont colorées
                 saisie 3 en B2 , les cellules D10 D11 D12 sont colorées
                 saisie 1 en B2 , la celulle D10 est coloré et les autres redeviennent blanche
quel code gere cette fonction ?

Bobbob83
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
31 juil. 2007 à 03:30
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
   
    If Target.Address(False, False) = "B2" Then
        For I = 0 To Target.Value - 1
            Range("D10").Offset(I, 0).Interior.ColorIndex = 37
            '.............
        Next
    End If
End Sub

MPi
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
31 juil. 2007 à 13:00
bonjour MPI

je n'arrive toujours pas a utiliser le code private sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
   
    If Target.Address(False, False) = "B2" Then
        For I = 0 To Target.Value - 1
            Range("D10").Offset(I, 0).Interior.ColorIndex = 37
            '.............
        Next
    End If
End Sub

J'ai copié collé le code dans le module1 mais rien ne se passe quand je modifie la cellule B2 aucune coloration des cellules

je fais peut etre une erreur de la coller dans le module general qu' en pense tu ?
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
31 juil. 2007 à 15:28
Normal que rien se passe si tu l'as copié dans le module 1!
Private Sub Worksheet_Change est une macro qui se lance lors de la modification de la feuille.
Ta macro doit donc se trouver dans Feuil1 par exemple plutôt que dans module 1.

De part tes questions, j'ai l'impression que tu découvres complètement le VBA, je te conseillerais donc d'aller faire une petite recherche dans les tutoriaux mot clé "VBA".
Y a des trucs bien faits qui te permettront de comprendre un peu plus en qui consiste les macros.

Bon courage!

Tubafat
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
31 juil. 2007 à 20:50
bonsoir et merci pour tout jai commencé ma macro et j'ai réusie à integrer les votres mon codes et un peut etrange mais bon je suis débutant :)

dans feuil1 :

sheet_Change(ByVal Target As Range)
    Dim I As Integer
   
    If Target.Address(False, False) = "B2" Then
        For I = 0 To Target.Value - 1
            Range("D10").Offset(I, 0).Application.Run "Classeur1!Macro1"
            '.............
        Next
    End If
End Sub

dans module 1 :

Sub Macro1()


'
' Macro1 Macro
' Macro enregistrée le 31/07/2007 par POSTE09
'


Range("b8").Select
Selection.Copy
Range("C9").Select
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
    tbl.Columns.Count).Select
   ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
      Cells(16384, 2).End(xlUp).Select
    Selection.Cells(2, 1).Activate
      Selection.Cells(2, 1).Activate
       Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
        Application.CutCopyMode = False
       ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
    Selection.Cells(2, -7).Activate
Selection.Cells(2, 1).Activate
Range("C5").Select
End Sub

je sais c'est pas joli mais c est un début

quand je saisi un nombre dans la cellule B2 la macro copie le contenu de la cellule b8 une ligne sur deux

si B2 = 2

C8:  voiture
C9 :
C10 : voiture
C11 :
C12 : voiture

Mais y en a une de trop la C12

deuxieme probleme si je reduit le chiffre en B2 = 1 la macro copie ine fois  voiture en C14
mais elle ne devrais rien copier dutout effacer les ligne c10 c12 ......
pour que le nombre de ligne "voiture" corresponde a la valeur  de B2

troisieme probleme

quand je rajoute le deuxieme tableau (les velo) la macro considere quel fais partie du tableau voiture et recopie la cellule C8 en dessous du tableau vélo alors quelle doit les copier entre les deux tableaux

voila c est parfait mais c est un bon debut pour une premier prog en vba

quand pensez vous  soyez indulgant  j'ai eu beaucoup de mal à faire se code meme si il est nul

merci
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 août 2007 à 03:53
Bob bob bob, prend le temps de lire des bouquins.
La forêt dans laquelle tu viens d'entrer est vaste et tu es loin d'en sortir...

Relis ton code et réfléchis à chaque ligne que tu as écrite. Certaines sont doublées pour rien, certaines ne font aucun sens, ...

Ouais, un bon bouquin que tu lis attentivement du début à la fin.

MPi
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
1 août 2007 à 19:59
bonsoir

Range("A1").End(xlDown).Offset(2, 0).Select

dans ce code est t il possible de remplacer le nombre 2 du "Offset(2,0)"
avec la valeur dune cellule ?
si la cellule A1 = 5 alors le offset égale (5,0)
Range("A1").End(xlDown).Offset(2, 0).Select

j'ai testé avec une instruction
i = A1
et
Offset(i,0)

Mais la valeur de i reste a zero

quel est la solution ?

merci d'avence
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 août 2007 à 02:16
    Range("A1").End(xlDown).Offset(Range("A1").Value, 0).Select

ça descendra le curseur de X lignes (selon la valeur en A1) en dessous de la plage déjà inscrite ...

N'oublie pas le bouquin

MPi
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 août 2007 à 02:18
Tu aurais pu aussi utiliser ta méthode, mais l'écrire correctement
i = Range("A1").Value

MPi
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
2 août 2007 à 12:25
bonjour

l'idée etait bonne mais le probleme c'est que je ne sais pas encore ecrire les codes correctement
c'est pour ça que je demande de l'aide, je comprends le code mais je sais pas le metrre en forme, je pense que le bouquin est une bonne solution, as tu des suggestions
 pour le bouquin le quel dois je prendre ??
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 août 2007 à 18:09
N'importe lequel des bouquins pour débutant peut suffire.
L'important, c'est de bien apprendre la base.
Avec une bonne base, tu pourras penser à développer des applications intéressantes et bien montées.

MPi
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
13 août 2007 à 23:57
bonsoir MPI

j'ai lu un bouquin

et j'ai fais quelques macros

dans feuil1 la macro evenement

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
   
    If Target.Address(False, False) = "B2" Then
        For I = 0 To Target.Value - 1
            Range("D10").Offset(I, 0).Application.Run "Classeur2!Macro1"
        Next
    End If
End Sub

dans le module 1

la macro pour copier la cellule (b8 "voiture") selon la valeur de B2

Sub Macro1()
' Macro enregistrée le 31/07/2007 par POSTE09
'



Range("b8").Select
Selection.Copy
Range("C9").Select
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
    tbl.Columns.Count).Select
   ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
      Cells(16384, 2).End(xlUp).Select
    Selection.Cells(2, 1).Activate
      Selection.Cells(2, 1).Activate
       Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
        Application.CutCopyMode = False
       ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
    Selection.Cells(2, 1).Activate
Range("C5").Select
End Sub

ça marche mais mais ça me copie la cellule en dessous du tableau velo alors que ça devrai la copier entre les deux tableau, je n'arrive pas à trouver le bon code Meme avec le bouquin

une macro pour supprimer les lignes entre voiture et velo



Sub Macro7()
'
Dim I     As Long
Dim Plage As Range
For x = 1 To 100
Set Plage = Range("B9:B" & Range("B9").End(xlDown).Row)
For I = Plage.Cells.Count To 1 Step -1
  If Plage.Cells(I).Value <> velo Then
    Plage.Cells(I).EntireRow.Delete
Exit For



  End If
Next
Next x
'
End Sub


ce qui donne :

B8  voiture
B9  velo

ça c'est bon

il me manque une macro pour inserer des lignes entre le tableau avec la valeur de B2

mon idée c'est de lancer la macro 7 pour effacer les lignes puis lancer la macro (que je n'arrive pas à faire) pour inserer les lignes et lancer la macro 1 pour copier la cellule voiture

j'avoue que la je seche c beaucoup de boulot pour pas grand chose, c compliqué de copier des cellules entre deux lignes sous excel pourtant je demande pas la lune

ma prochaine action sera d'acheter un autre bouquin car celui la etait bof
je continu a plancher dessus courrage !

@@++
0
Rejoignez-nous