Macro compliquée

Résolu
Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un document excel assez compliqué et je bloque sur une macro.

J'ai plusieurs feuilles comportant la même trame mais avec des noms différents et une feuille (que l'on appellera "feuille finale" qui reprend certaines données de toute ces feuille.

Une macro me permet, grâce à une userform, d'insérer des données dans la première ligne vide de la feuille de mon choix.

Je cherche à y associer une macro qui reprenne les valeurs de cette ligne et la colle dans ma "feuille finale".
Jusque là pas de souci.
Sauf que ma feuille finale comprend une ligne "titre" pour chaque feuille de mon classeur.
Comment faire en sorte que les données enregistrées s'incrémentent dans la ligne en dessous de la ligne "titre" correspondant à la feuille remplie?

Exemple

"Feuille 1 ligne 1"
Lieu1 Situation1 Risque1

"Feuille 2 ligne 1"
Lieu2 Situation2 Risque2

"Feuille Finale"
Feuille1
Lieu1 Risque1

Feuille 2
Lieu2 Risque2

Quand jenregistre de nouvelles données sur la feuille1 grâce à ma userform je veux arriver à

"Feuille Finale"

"Feuille Finale"
Feuille1
Lieu1 Risque1
Lieu3 Risque3

Feuille 2
Lieu2 Risque2

Comment faire en sorte que mes données se mettent avant le titre "Feuille2" ?

--
Après Open Office essayez Opin Offece :P
Configuration: ...

21 réponses

  • 1
  • 2
  1. Gord21 Messages postés 928 Statut Membre 289
     
    Bonjour,
    Une petite question : comment sont ajoutées tes données sur Feuille 1 ? (macro, manuellement, )

    Pour comment faire, je pense que tu recherches la dernière ligne inscrite sous Feuille 1 dans Feuille finale, tu insères une ligne et tu copies tes données.
    0
  2. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Elles y sont insérées par macro.
    exemple:
    Range("a65536").End(xlUp).Offset(1, 0) = textbox1.value

    Quelle est la macro permettant de rechercher la ligne en dessous de ma ligne "Feuille 1" et d'y insérer une nouvelle ligne? Sachant que ma ligne "feuille 1" est composée de plusieurs cellules fusionnées
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,
    Tu peux trouver cette ligne grâce à la fonction find (tu recherches Feuille1 par exemple) un exemple ici pas très récent...
    0
  4. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Re,

    Bon ben je n'arrive pas à adapter son code pour réaliser le mien (et oui je suis une vraie bille).

    Un peu d'aide ne serait pas de refus si tu as le temps.

    Merci d'avance
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut Farfadet,
      Petite question :
      ta feuille "finale" est construite sur ce modèle :
      feuille 1
      des données
      des données
      <une ligne vide>
      feuille 2
      des données
      des données
      des données
      <une ligne vide>
      feuille 3
      etc...
      Avec systématiquement une ligne vide entre les données de la feuille précédente et le nom "feuille x"?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Non.

    Au tout début de l'utilisation j'ai:

    Feuille1
    Feuille2
    Feuille3.
    ...

    Et par la suite je veux obtenir

    Feuille1
    Données
    Données
    Données
    Données
    Feuille2
    Données
    Données
    Feuille3
    Données

    Sachant que les cases "feuille" sont composées de plusieurs cases fusionnées. Ce sont en quelques sortes des cases "titre"

    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Voilà déjà la bonne syntaxe pour la méthode find :
      Dim donnee As String, numlig As String
      donnee = ActiveSheet.Name
      numlig = Sheets("Feuille finale").Cells.Find(What:=donnee, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row


      numlig te renvoie donc le numéro de ligne ou l'on trouve ton nom de feuille (feuille 1) sur la feuille finale

      Reste à copier / coller ta ligne.
      Pour le "copier" pas de souci, je suppose que tu copies la dernière ligne saisie et donc la dernière ligne non vide :
      Sheets("Feuille 1").Range("A65536").End(xlUp).EntireRow.Copy

      Par contre le "coller" pose problème. Le plus simple est de coller chaque nouvelle ligne juste sous la ligne de titre dans la feuille finale. Ton code complet donnerait ceci :

      Dim donnee As String, numlig As String
      'ton code ici
      donnee = ActiveSheet.Name
      numlig = Sheets("Feuille finale").Cells.Find(What:=donnee, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
      Sheets("Feuille finale").Range("A" & numlig).Offset(1, 0).EntireRow.Insert Shift:=xlDown
      ActiveSheet.Range("A65536").End(xlUp).EntireRow.Copy Sheets("Feuille finale").Range("A" & numlig).Offset(1, 0)

      0
  7. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Erf ça a marché un moment dans un classeur de test mais ça ne marche pas dans mon vrai classeur

    La macro m'insère une ligne sous celle recherchée et me colle le nom de cette ligne et non les valeurs de la ligne située en fin de tableau
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Donne nous ton code, se sera plus simple de le corriger...
      Quand tu EDIT un message signale le car on ne le vois pas dans "mes interventions"...
      0
  8. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    If Sheets("données").Range("m1") = "Administratif" Then
    Sheets("Administratif").Select
    Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1")
    Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("o1")
    Sheets("données").Range("l1").Copy
    Range("c65536").End(xlUp).Offset(1, 0).Select
    ActiveCell.PasteSpecial
    If ActiveCell.Value = "Photo" Then ActiveCell.Comment.Visible = False
    Range("d65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("p1").Value
    Range("e65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("q1").Value
    Range("f65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("r1").Value
    Range("g65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("w1").Value
    Range("i65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("t1").Value
    Range("j65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("w1").Value
    Range("m65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("u1").Value
    Range("h65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("s1").Value
    Range("k65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("x1").Value
    Range("l65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("y1").Value

    Sheets("suivi").Select
    Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("m1")
    Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1")
    Range("c65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("o1")
    Range("d65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("x1")
    Range("e65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("u1")

    Dim donnee As String, numlig As String
    donnee = ActiveSheet.Name
    numlig = Sheets("suivi").Cells.Find(What:="administratif", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
    Sheets("suivi").Range("A" & numlig).Offset(1, 0).EntireRow.Insert Shift:=xlDown
    Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Sheets("suivi").Range("A" & numlig).Offset(1, 0)

    End If
    0
  9. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Tu écris :

    Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Sheets("suivi").Range("A" & numlig).Offset(1, 0)


    ce code coupe la dernière ligne saisie en feuille suivi pour la coller en feuille suivi sue la ligne sous le titre. C'est donc bien cela...
    Je ne vois pas d'erreur.
    Par contre,
    Dim donnee As String
    donnee = ActiveSheet.Name 
    ne servent à rien
    0
  10. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Là est bien le souci
    Le code est bon mais la macro exécutée ne correspond pas à ce qui se passe...
    Les mystères d'excel
    0
  11. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    essaie de rajouter ".value" à ces lignes :
    Sheets("suivi").Select
    Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("m1").value
    Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1").value
    etc etc
    0
  12. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Toujours le même problème
    0
  13. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Déjà change :
    Dim numlig as string
    par :
    Dim numlig As Integer

    et change :
    Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Sheets("suivi").Range("A" & numlig).Offset(1, 0)

    par
    Sheets("suivi").Range("A65536").End(xlUp).EntireRow.Cut Range("A" & numlig).Offset(1, 0)
    0
  14. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    C'est fait

    toujours le même résultat
    0
  15. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Dans mon profil tu trouveras mon mail perso. Peut être pourrais tu m'envoyer ton fichier?
    0
  16. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Le mail vient de partir :)
    0
  17. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    en réception. 18Mo le fichier Excel!!!!!!!!
    0
  18. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Ouais je pense que ce sont mes macros de débutant qui foutent le bordel :P
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Non ce ne sont pas tes macros "de débutant" qui alourdissent ton classeur. Ce sont les photos!
      Un logo de 647Ko par feuille sur 8 feuille = 5Mo.
      Ensuite toutes ces images insérées dans des commentaires...
      Oui c'est beau, mais ça va forcément coincer à un moment ou à un autre.
      Réduit au maximum les tailles de ces images quitte à perdre de leur qualité.

      Au passage, bonjour Mr Le Pingou et bonne année...
      0
      1. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402 > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Dako dak!
        Encore merci
        0
  19. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour Farfadet88,
    Pouvez-vous mettre une copie du vrai classeur avec 2 à 3 feuilles contenant une dizaine de lignes et bien sur la UserForm la feuille [feuille finale] et les procédures (se sera moins lourd en taille !) sur http://cijoint.fr/
    0
  20. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Des pare-feux admin m'empêchent de déposer ou récupérer des fichier sur Ci-joint... Hélas
    0
  21. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    J'ai compris.
    Dans ton code tu nous écris :

    Sheets("suivi").Select 
    Range("a65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("m1") 
    Range("b65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("n1") 
    Range("c65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("o1") 
    Range("d65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("x1") 
    Range("e65536").End(xlUp).Offset(1, 0) = Sheets("données").Range("u1")


    Or dans ta feuille suivi, la dernière ligne non vide avant cette macro est une cellule fusionnée. Donc les lignes représentées par "Range("a65536").End(xlUp).Offset(1, 0)" "Range("b65536").End(xlUp).Offset(1, 0)" etc ne sont pas les mêmes...
    Solution :

    Sheets("suivi").Select 
    Dim i as Integer
    i = Range("a65536").End(xlUp).Offset(1, 0).Row
    Range("A" & i) = Sheets("données").Range("m1") 
    Range("B" & i) = Sheets("données").Range("n1") 
    Range("C" & i) = Sheets("données").Range("o1") 
    Range("D" & i) = Sheets("données").Range("x1") 
    Range("E" & i) = Sheets("données").Range("u1")


    ps : j'ai supprimé ton fichier de mon ordi...
    0
  • 1
  • 2