Copier / Coller décallé

Bonjour,

Je débute en création de formulaire et en code VBA.

Cela bientôt une semaine que je cherche à créer un formulaire et j'y suis presque arrivé 8) (entre autre grâce à vous)

Presque parce que je bute sur un problème :

J'ai créer un bouton qui permet (entre autre) de copier une ligne dans un fichier, puis de la coller dans un autre fichier en l’insérant à la dernière ligne vide.

Mon problème c'est le "coller" est :

décaler de plusieurs colonne (en H au lieu d'être en A!!!!)

3 ligne en dessous de la dernière......

Voici le code ce bouton :

 'bouton enregistrer client
      Private Sub CommandButton2_Click()
      Sheets("Fiche Client").Select
      Sheets("Fiche Client").Copy
      Application.Dialogs(xlDialogSaveAs).Show
      ActiveWorkbook.Close
      Sheets("Index Client").Select
     'copie les information du clients pour les coller ensuite dans le fichier index client
      Range("A2:Q2").Select
      Selection.Copy
     Dim wbSource, wbFichierUsager As Workbook
     'ouverture du fichier index client pour y inserer le nouveau client.

     Dim strFileName As String
     Dim intChoice As Integer
    'Déclarer les variables de base
    Set wbFichierUsager = ThisWorkbook

   'On va appeler une application de MS Office afin de chercher et d’ouvrir le bon fichier
   'Avec la commande qui suit, on indique que nous ne voulons qu’un seul fichier
   Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
   'On affiche l’écran de dialogue de MS Office
   intChoice = Application.FileDialog(msoFileDialogOpen).Show
   'On s’assure que l’usager a fait un choix
    If intChoice <> 0 Then
    'On récupère le nom complet du fichier
   strFileName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
   Workbooks.Open strFileName
   Set wbSource = ActiveWorkbook
  'Sinon, on arrête tout en notifiant l’usager
  Else
  'S’il n’y a pas de fichier, on quitte sans rien faire
  MsgBox "La procédure est annulée car aucun fichier n’a été entré."
  Exit Sub
  End If
  'Ici, on insère le code qui applique les changements voulus au fichier ouvert, qui sera ensuite refermé

Dim L As Integer

If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then

L = Sheets("feuil1").Range("A" & Rows.Count).End(xlUp).Rows + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
ActiveSheet.Paste

End If
Sheets("feuil1").Select
wbSource.Close SaveChanges:=True
'On ferme le fichier en sauvegardant

End Sub

Vous comprendrez rapidement que le bouton ne sert pas que à ça (je lui en demande peut être trop et pour un débutant c'est pas le plus simple.... )

Je n'arrive pas a comprendre ou est le soucis?????? Pourriez-vous m'aider ?

Merci à vous.

Bonsoir

A vérifier si cela peut te convenir

'bouton enregistrer client
Private Sub CommandButton2_Click()
Dim Ws As Worksheet

  Sheets("Fiche Client").Copy
  Application.Dialogs(xlDialogSaveAs).Show
  ActiveWorkbook.Close

  Set Ws = Sheets("Index Client")

  With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False       ' Un seul fichier
    If .Show Then
      If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
        With Workbooks.Open(.SelectedItems(1))
          Ws.Range("A2:Q2").Copy Sheets("feuil1").Range("H" & Rows.Count).End(xlUp).Offset(3)
          .Close savechanges:=True
        End With
      End If
    Else
      'S’il n’y a pas de fichier, on quitte sans rien faire
      MsgBox "La procédure est annulée car aucun fichier n’a été entré."
    End If
  End With
End Sub

Salut et Merci

Dans un premier temps j'ai copier et coller ton code et mis à part le fait que l'enregistrement se faisait 2 lignes en desssous (alors qu’avant c'était 5 ligne en dessous de la dernière) ça ne changeais pas grand chose.

Néanmoins ton code étant plus simple que le mien je l'ai conservé et en modifiant :

.Range("H" & Rows.Count)

par

.Range("A" & Rows.Count)

et la c'est ok mais 2 Lignes trop bas

PS : afin de mieux comprendre le code peux-tu me le "traduire" ? Car il est quand même bien plus simple que le mien et pour faire exactement pareil

Bonjour

janno a écrit :

afin de mieux comprendre le code peux-tu me le "traduire" ?

Ce sont les mêmes instructions que dans ta 1ère macro

'bouton enregistrer client
Private Sub CommandButton2_Click()
Dim Ws As Worksheet

  ' Copie de la feuille "Fiche Client" dans un nouveau classeur
  Sheets("Fiche Client").Copy
  Application.Dialogs(xlDialogSaveAs).Show
  ActiveWorkbook.Close

  Set Ws = Sheets("Index Client")   ' feuille active

  With Application.FileDialog(msoFileDialogOpen)      ' Boite de dialogue
    .AllowMultiSelect = False       ' Un seul fichier
    If .Show Then   ' On a cliqué sur Ok
      ' Question
      If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
        With Workbooks.Open(.SelectedItems(1))    ' Ouverture du fichier et on "bosser" avec
          ' Copie de la feuille active vers le classeur que l'on vient d'ouvrir
          Ws.Range("A2:Q2").Copy Sheets("feuil1").Range("H" & Rows.Count).End(xlUp).Offset(3)
          .Close savechanges:=True      ' Fermeture du classeur en l'enregistrant
        End With
      End If
    Else
      'S’il n’y a pas de fichier, on quitte sans rien faire
      MsgBox "La procédure est annulée car aucun fichier n’a été entré."
    End If
  End With
End Sub
janno a écrit :

et la c'est ok mais 2 Lignes trop bas

Modifie Offset(3) par la valeur que tu veux

cette fois la ligne est ecrite au bon endroit mais ecrase la dernière ligne écrite.....

Bonjour

Fournis les fichiers en cause

Entre la 1ère macro

janno a écrit :

et la c'est ok mais 2 Lignes trop bas

et la seconde
janno a écrit :

cette fois la ligne est ecrite au bon endroit mais ecrase la dernière ligne écrite...

Je n'ai rien changé, à part les commentaires

en première lecture, tu as modifier

.rows + 1 par Offset(3) sur cette ligne :

 Ws.Range("A2:Q2").Copy Sheets("feuil1").Range("H" & Rows.Count).End(xlUp).Offset(3)

Ce que j'ai modifié pour (1) et "A" en lieu et place de "H"

Voilà le fichier :

Je veux ajouter mon nouveau client à la suite dans ce fichier :

8index-clients.xlsx (10.94 Ko)

Le bouton enregistrer doit :

  • enregistrer la "fiche client" dans un nouveau fichier (là c'est OK)
  • ajouter le nouveau client à mon index client (en ce moment il ecrit bien mais écrase le dernier ajout...)

Après je vais m'attaquer aux formulaires devis et factures (c'est pas gagné.....)

Merci à toi

Bonjour

Je vais arrêter

Où as tu vu dans ma première macro que j'utilise .rows + 1 ?

Recopie la ligne de ma macro, parce que actuellement je n'arrive pas à la trouver, et tant que je ne saurais pas je ne pourrais pas t'aider

Rends toi compte : Je suis incapable de trouver un bout de code

je pense que nous ne nous comprenons pas et donc je comprends pas ta réaction :

- J'ai pas dit que tu avais utilisé .rows + 1 mais que tu m'avais proposé .offset(3) à la place.

Mon code de départ :

L = Sheets("feuil1").Range("A" & Rows.Count).End(xlUp).Rows + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

Ton code (qui je le rappel fonctionne mieux) :

Ws.Range("A2:Q2").Copy Sheets("feuil1").Range("H" & Rows.Count).End(xlUp).Offset(3)

- Ensuite tu me demande de te fournir les fichiers :

Fournis les fichiers en cause

c'est pas ce que j'ai fait ?

Pas compris

Bonjour

Je ne sais pas comment appeler ça

J'ai bien indiqué entre ma 1ère macro et la seconde

Banzai64 a écrit :

Je n'ai rien changé, à part les commentaires

tu réponds

janno a écrit :

en première lecture, tu as modifier

.rows + 1 par Offset(3) sur cette ligne :

A partir de TA macro j'ai à peu près tout modifié

Désolé je ne veux pas me fâcher avec toi, mais quand quelqu'un me dit que ce que je raconte n'est pas la vérité je le prends mal

Alors avant d'aller plus en avant je passe la main

OK passe ta route

Tu te contredis toi même :

Banzai64 a écrit :

Je n'ai rien changé, à part les commentaires

Pourtant je constate quelques changements dans le code (il suffit de lire les 2 premiers post pour s'en rendre compte...

Je te pris de m'excuser d'avoir constater des changements.

Puis tu réponds :

Banzaï a écrit :

A partir de TA macro j'ai à peu près tout modifié

Commence soit par m'expliquer soit par reconnaître tes erreurs!!!!!!!!!!

Edith : c'est peut être tout simplement parce que ta macro n'est pas la solution et tu es vexé.......

l'erreur et le manque de connaissance est humain.....

Edith 2 : en plus c'est facile on peu pas communiquer avec toi!!!!! (mail impossible qui renvoi sur notre boite mail!!!!!et Mp désactivé) aurais-tu peur de te faire "harcelé" par ton manque de psychologie avec les gens...... (oups je me suis emporté la case pour recevoir une copie de mon mail étais coché...)

A moins d'être modérer (surement par toi) ça auras au moins le mérite d'être vu et su par tout le monde

Message à effacer merci

Rechercher des sujets similaires à "copier coller decalle"