Macro compliquée
Résolu
Farfadet88
Messages postés
6295
Date d'inscription
Statut
Membre
Dernière intervention
-
Farfadet88 Messages postés 6295 Date d'inscription Statut Membre Dernière intervention -
Farfadet88 Messages postés 6295 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" ?
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" ?
A voir également:
- Macro compliquée
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro maker - Télécharger - Divers Utilitaires
- Macro word - Guide
21 réponses
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.
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.
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
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
Salut,
Tu peux trouver cette ligne grâce à la fonction find (tu recherches Feuille1 par exemple) un exemple ici pas très récent...
Tu peux trouver cette ligne grâce à la fonction find (tu recherches Feuille1 par exemple) un exemple ici pas très récent...
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
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
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"?
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"?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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"
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"
Voilà déjà la bonne syntaxe pour la méthode find :
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 :
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 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)
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
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
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
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
Tu écris :
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,
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.Namene servent à rien
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
Le code est bon mais la macro exécutée ne correspond pas à ce qui se passe...
Les mystères d'excel
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
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
Déjà change :
et change :
par
Dim numlig as stringpar :
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)
Ouais je pense que ce sont mes macros de débutant qui foutent le bordel :P
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...
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...
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/
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/
J'ai compris.
Dans ton code tu nous écris :
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 :
ps : j'ai supprimé ton fichier de mon ordi...
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...