Reprises de données
Fermé
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
-
2 sept. 2013 à 13:12
JinRo Messages postés 22 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 15 décembre 2013 - 23 sept. 2013 à 12:21
JinRo Messages postés 22 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 15 décembre 2013 - 23 sept. 2013 à 12:21
A voir également:
- Reprises de données
- Reinstaller windows sans perte de données - Guide
- Effacer les données de navigation - Guide
- Www.facebook.com vous a redirigé à de trop nombreuses reprises ✓ - Forum Facebook
- Tnt base de données vide ✓ - Forum TNT / Satellite / Réception
- Vous avez utilisé ce numéro de téléphone à de trop nombreuses reprises ✓ - Forum Gmail
8 réponses
melanie1324
Messages postés
1504
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
154
2 sept. 2013 à 14:00
2 sept. 2013 à 14:00
Bonjour,
Moi j'écrirais le code comme suit :
Dim i&, fin&, aa
With Feuil1
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin <= 2 Then Exit Sub
For i = 2 To fin
If cells(i, 7) = "En cours" And cells(i, 6) = "Boudry" And cells(i,7).Font.ColorIndex = 3 Then EntireRow.Select
Sheets("feuil2").Select
Selection.PasteSpecial Paste:=xlPasteValues
Next i
End With
Moi j'écrirais le code comme suit :
Dim i&, fin&, aa
With Feuil1
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin <= 2 Then Exit Sub
For i = 2 To fin
If cells(i, 7) = "En cours" And cells(i, 6) = "Boudry" And cells(i,7).Font.ColorIndex = 3 Then EntireRow.Select
Sheets("feuil2").Select
Selection.PasteSpecial Paste:=xlPasteValues
Next i
End With
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
Modifié par JinRo le 2/09/2013 à 14:23
Modifié par JinRo le 2/09/2013 à 14:23
Bonjour,
Merci de votre réponse, mais étrangement quand j'essaie votre solution
j'ai ma feuil2 qui scintille pendant 1mn à peu prêt puis je me retrouve avec la macro inscrite sur cette dernière...
Mais rien de plus...
En modifier le code comme suit :
Le -16776961 correspond à la couleur de la mise en forme conditionnelle et là
J'ai le débugger qui me dit que la méthode PasteSpécial de la Classe Range a échoué. (erreur 1004). Malheureusement cela ne m'éclaire pas....
Merci de votre réponse, mais étrangement quand j'essaie votre solution
j'ai ma feuil2 qui scintille pendant 1mn à peu prêt puis je me retrouve avec la macro inscrite sur cette dernière...
Mais rien de plus...
En modifier le code comme suit :
Sub calcul3() Dim i&, fin&, aa With Feuil1 fin = .Range("A" & Rows.Count).End(xlUp).Row If fin <= 2 Then Exit Sub For i = 2 To fin If Cells(i, 7) = "En cours" And Cells(i, 6) = "Boudry" And Cells(i, 7).Font.ColorIndex = -16776961 Then EntireRow.Select Sheets("Mail").Select Selection.Paste Paste:=xlPasteValues Next i End With End Sub
Le -16776961 correspond à la couleur de la mise en forme conditionnelle et là
J'ai le débugger qui me dit que la méthode PasteSpécial de la Classe Range a échoué. (erreur 1004). Malheureusement cela ne m'éclaire pas....
bonjour
la suite avec le code de Melanie
cordialement
la suite avec le code de Melanie
Dim i&, fin&, aa With Feuil1 fin = .Range("A" & Rows.Count).End(xlUp).Row If fin <= 2 Then Exit Sub For i = 2 To fin If cells(i, 7) = "En cours" And cells(i, 6) = "Boudry" And cells(i,7).Font.ColorIndex = 3 Then EntireRow.Select Sheets("feuil2").activate derlig =Range("A" & Rows.Count).End(xlUp).Row +1 Sheets("feuil2").cells(derlig,1).Select Selection.PasteSpecial Paste:=xlPasteValues Next i End With
cordialement
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
2 sept. 2013 à 16:53
2 sept. 2013 à 16:53
Bonjour,
Merci également de votre réponse mais encore une fois, j'ai la feuille qui scintille et sur la feuille de récupération de données...
J'ai la macro qui s'écrit sur 5000 et des poussières de lignes...
J'avoue que là je suis complètement perdu O_O
Merci également de votre réponse mais encore une fois, j'ai la feuille qui scintille et sur la feuille de récupération de données...
J'ai la macro qui s'écrit sur 5000 et des poussières de lignes...
J'avoue que là je suis complètement perdu O_O
melanie1324
Messages postés
1504
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
154
Modifié par melanie1324 le 2/09/2013 à 17:23
Modifié par melanie1324 le 2/09/2013 à 17:23
bonjour,
essaie avec ca et fait le pas à pas détaillé pour voir ce qui plante :
Dim i&, fin&, aa
sheets("Feuil1").select
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin <= 2 Then Exit Sub
For i = 2 To fin
sheets("Feuil1").select
If sheets("Feuil1").cells(i, 7) = "En cours" And sheets("Feuil1").cells(i, 6) = "Boudry" And sheets("Feuil1").cells(i,7).Font.ColorIndex = 3 Then
Rows(i).Select
Sheets("feuil2").activate
derlig =Range("A" & Rows.Count).End(xlUp).Row +1
Sheets("feuil2").cells(derlig,1).Select
Selection.PasteSpecial Paste:=xlPasteValues
Next i
essaie avec ca et fait le pas à pas détaillé pour voir ce qui plante :
Dim i&, fin&, aa
sheets("Feuil1").select
fin = .Range("A" & Rows.Count).End(xlUp).Row
If fin <= 2 Then Exit Sub
For i = 2 To fin
sheets("Feuil1").select
If sheets("Feuil1").cells(i, 7) = "En cours" And sheets("Feuil1").cells(i, 6) = "Boudry" And sheets("Feuil1").cells(i,7).Font.ColorIndex = 3 Then
Rows(i).Select
Sheets("feuil2").activate
derlig =Range("A" & Rows.Count).End(xlUp).Row +1
Sheets("feuil2").cells(derlig,1).Select
Selection.PasteSpecial Paste:=xlPasteValues
Next i
en fait tu selectionnes bien ta ligne avec tes conditions mais tu ne la copies pas
essaie ça
essaie ça
Dim i&, fin&, aa sheets("Feuil1").select fin = .Range("A" & Rows.Count).End(xlUp).Row If fin <= 2 Then Exit Sub For i = 2 To fin sheets("Feuil1").Activate If sheets("Feuil1").cells(i, 7) = "En cours" And sheets("Feuil1").cells(i, 6) = "Boudry" And sheets("Feuil1").cells(i,7).Font.ColorIndex = 3 Then Rows(i).Copy Sheets("feuil2").activate derlig =Range("A" & Rows.Count).End(xlUp).Row +1 Sheets("feuil2").cells(derlig,1).Select Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode= false end if Next i
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
Modifié par JinRo le 3/09/2013 à 12:02
Modifié par JinRo le 3/09/2013 à 12:02
Bonjour à tous et un grand merci de votre aide ainsi que de votre compréhension.
Malheureusement j'ai toujours un soucis...
Je vous explique voici mon code de mise en forme conditionnelle :
C'est un code que j'ai fait à partir de l'enregistreur de macro.
Maintenant en reprenant vos macros. J'ai une erreur inatendu : Erreur de compilation. Référence incorrecte ou non qualifiée.
Si je l'enlève le point devant Range, pas de soucis la macro tourne mais ne fait rien.
J'ai du oublié quelque chose ou quelque chose m'échappe... malheureusement étant débutant et la fatigue n'aidant pas, je ne peux que m'en remettre à vous et à vos connaissances.
Par ailleurs, j'espère que vos explications me permettront d'avancer non seulement dans mon travail mais également dans mon autoformation.
Malheureusement j'ai toujours un soucis...
Je vous explique voici mon code de mise en forme conditionnelle :
Sub Misenformecond() With Feuil1 Cells.FormatConditions.Delete Range("K2:K30001").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$K2+30<AUJOURDHUI()" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .Color = 3 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("L2:L30001").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$L2+30<AUJOURDHUI()" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .Color = 3 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("M2:M30001").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$M2+30<AUJOURDHUI()" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .Color = 3 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("N2:N30001").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$N2+30<AUJOURDHUI()" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .Color = RGB(255, 0, 0) .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("O2:O30001").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$O2+7<AUJOURDHUI()" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .Color = RGB(255, 0, 0) .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("P2:P30001").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$P2+60<AUJOURDHUI()" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .Color = RGB(255, 0, 0) .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("Q2:Q30001").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$Q2+20<AUJOURDHUI()" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .Color = RGB(255, 0, 0) .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("A2:AJ3000").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=$G2=""Terminé""" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent3 .TintAndShade = 0.599963377788629 End With Selection.FormatConditions(1).StopIfTrue = True End With End Sub
C'est un code que j'ai fait à partir de l'enregistreur de macro.
Maintenant en reprenant vos macros. J'ai une erreur inatendu : Erreur de compilation. Référence incorrecte ou non qualifiée.
Sub Calcul20() Dim i&, fin&, aa Sheets("Rentes").Select fin = .Range("A" & Rows.Count).End(xlUp).Row If fin <= 2 Then Exit Sub For i = 2 To fin Sheets("Rentes").Activate If Sheets("Rentes").Cells(i, 7) = "En cours" And Sheets("Rentes").Cells(i, 6) = "Boudry" And Sheets("Rentes").Cells(i, 17).Font.Color = RGB(255, 0, 0) Then Rows(i).Copy Sheets("feuil1").Activate derlig = Range("A" & Rows.Count).End(xlUp).Row + 1 Sheets("feuil1").Cells(derlig, 1).Select Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End If Next i End Sub
Si je l'enlève le point devant Range, pas de soucis la macro tourne mais ne fait rien.
J'ai du oublié quelque chose ou quelque chose m'échappe... malheureusement étant débutant et la fatigue n'aidant pas, je ne peux que m'en remettre à vous et à vos connaissances.
Par ailleurs, j'espère que vos explications me permettront d'avancer non seulement dans mon travail mais également dans mon autoformation.
Bonjour
essaie avec
ou bien
Trim supprime les espaces avant et après une chaine de caractère
et oui tu n'as pas besoin de point devant range.
et change .Font.Color par .Font.ColorIndex
bonne suite
essaie avec
If Sheets("Rentes").Cells(i, 7).value = "En cours" And Sheets("Rentes").Cells(i, 6).value = "Boudry" And Sheets("Rentes").Cells(i, 17).Font.ColorIndex = RGB(255, 0, 0) Then Rows(i).Copy
ou bien
If Trim(Sheets("Rentes").Cells(i, 7).value) = "En cours" And Trim(Sheets("Rentes").Cells(i, 6).value) = "Boudry" And Sheets("Rentes").Cells(i, 17).Font.ColorIndex = RGB(255, 0, 0) Then Rows(i).Copy
Trim supprime les espaces avant et après une chaine de caractère
et oui tu n'as pas besoin de point devant range.
et change .Font.Color par .Font.ColorIndex
bonne suite
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 3/09/2013 à 19:44
Modifié par michel_m le 3/09/2013 à 19:44
Bonjour
En VBA , on évite d'utiliser au maxi les méthodes "select", "copy", "paste" qui utilisent beaucoup de mémoire et ralentissent énormément l'exécution de la procédure
comme tu travailles avec des écritures de cellules au fur et à mesure il est essentiel de commencer par figer l'écran par
Application.ScreenUpdating = False
D'autre part il plus sécurisant de travailler en "bloc" par ex
les range, column, row sont alors des propriétés de sheet et doivent être précédés d'un point (ton erreur tout à l'heure)
Il aurat été +judicieux colonne 17 d'utiliser la cause de la mise en couleur plutôt que se baser sur la couleur:
.
comme tu as déclaré en long, cad> 32767 lignes ("long"+ facile à lire que "&": merci pour la maintenance)
il serait + intéressant de passer uniquement par une variable -tableau dynamique (à partir de 1000 lignes env.) très rapide
toujours pour faciliter la lecture (maintenance), indente ton code
procédure testée avec succès sur maquette (sauf test sur mise en forme conditionnelle) et en supposant que la ligne 1 de la feuille1 comporte des données
Michel
En VBA , on évite d'utiliser au maxi les méthodes "select", "copy", "paste" qui utilisent beaucoup de mémoire et ralentissent énormément l'exécution de la procédure
comme tu travailles avec des écritures de cellules au fur et à mesure il est essentiel de commencer par figer l'écran par
Application.ScreenUpdating = False
D'autre part il plus sécurisant de travailler en "bloc" par ex
with sheets(1) code end with
les range, column, row sont alors des propriétés de sheet et doivent être précédés d'un point (ton erreur tout à l'heure)
Il aurat été +judicieux colonne 17 d'utiliser la cause de la mise en couleur plutôt que se baser sur la couleur:
.
...And .Cells(Lig, "Q") + 20 < Date Then...
comme tu as déclaré en long, cad> 32767 lignes ("long"+ facile à lire que "&": merci pour la maintenance)
il serait + intéressant de passer uniquement par une variable -tableau dynamique (à partir de 1000 lignes env.) très rapide
toujours pour faciliter la lecture (maintenance), indente ton code
Option Explicit Sub Calcul20() Dim Lig As Long, fin As Long, T_ligne() Application.ScreenUpdating = False With Sheets("Rentes") fin = .Range("A" & Rows.Count).End(xlUp).Row If fin <= 2 Then GoTo fin For Lig = 2 To fin If .Cells(Lig, 7) = "En cours" And .Cells(Lig, 6) = "Boudry" And .Cells(Lig, 17).Font.Color = RGB(255, 0, 0) Then T_ligne = .Range(.Cells(Lig, "A"), .Cells(Lig, "AJ")) With Sheets("feuil1") fin = .Range("A" & Rows.Count).End(xlUp).Row + 1 .Range("A" & fin).Resize(1, 36) = T_ligne End With End If Next End With fin: End Sub
procédure testée avec succès sur maquette (sauf test sur mise en forme conditionnelle) et en supposant que la ligne 1 de la feuille1 comporte des données
Michel
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
23 sept. 2013 à 11:54
23 sept. 2013 à 11:54
Bonjour à tous et navré pour ma réponse tardive.
Malheureusement j'ai une peu de temps pour vous répondre et bcp de choses à faire tant au travail qu'à la maison.
Je vous remercie à tous pour vos réponses elles m'ont beaucoup éclairé.
Michel_M, pour ton information je débute complétement en vba mes connaissances se limitent à ce que je trouve sur le net, à l'explorateur d'objet et des exemples qu'on veut bien me montrer.
Je vais devoir refaire un post pour un autre sujet qui concerne un USF et il me semble que tu me donnes un semblant de réponse par rapport à mon problème...
En tout cas merci à tous ça fait plaisir de voir qu'il y a des gens sympas qui sont prêt à donner un coup de main à un novice comme moi.
Excellente journée à tous!
Malheureusement j'ai une peu de temps pour vous répondre et bcp de choses à faire tant au travail qu'à la maison.
Je vous remercie à tous pour vos réponses elles m'ont beaucoup éclairé.
Michel_M, pour ton information je débute complétement en vba mes connaissances se limitent à ce que je trouve sur le net, à l'explorateur d'objet et des exemples qu'on veut bien me montrer.
Je vais devoir refaire un post pour un autre sujet qui concerne un USF et il me semble que tu me donnes un semblant de réponse par rapport à mon problème...
En tout cas merci à tous ça fait plaisir de voir qu'il y a des gens sympas qui sont prêt à donner un coup de main à un novice comme moi.
Excellente journée à tous!
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
23 sept. 2013 à 12:01
23 sept. 2013 à 12:01
Bonjour à tous,
Navré pour ma réponse tardive mais j'ai été très occupé entre le travail et vie familiale.
Je vous remercie à toutes et à tous pour vos réponses qui m'ont aidé et qui m'ont permis d'en apprendre un peu plus sur la programmation VBA.
Michel_M, merci pour ton explication. Elle me permet de comprendre un peu mieux comment délimiter certaines choses. Maintenant je dois apprendre à appliquer ce que vous avez eu la gentillesse de me montrer.
J'apprends avec les macros automatique, l'explorateur d'objet ainsi que des exemples et solutions que je trouve sur le net et des bouquins que je lis entravers. Je sais que ce n'est pas la meilleure façon, mais je ne peux faire autrement.
Par ailleurs, il me semble dans ta réponse avoir trouvé un semblant de réponse à une question que je vais devoir poser pour un USF qui met 16 sec à valider les données.
Encore merci à tous d'avoir pris le temps de répondre à un novice comme moi.
Excellente journée à vous!
Navré pour ma réponse tardive mais j'ai été très occupé entre le travail et vie familiale.
Je vous remercie à toutes et à tous pour vos réponses qui m'ont aidé et qui m'ont permis d'en apprendre un peu plus sur la programmation VBA.
Michel_M, merci pour ton explication. Elle me permet de comprendre un peu mieux comment délimiter certaines choses. Maintenant je dois apprendre à appliquer ce que vous avez eu la gentillesse de me montrer.
J'apprends avec les macros automatique, l'explorateur d'objet ainsi que des exemples et solutions que je trouve sur le net et des bouquins que je lis entravers. Je sais que ce n'est pas la meilleure façon, mais je ne peux faire autrement.
Par ailleurs, il me semble dans ta réponse avoir trouvé un semblant de réponse à une question que je vais devoir poser pour un USF qui met 16 sec à valider les données.
Encore merci à tous d'avoir pris le temps de répondre à un novice comme moi.
Excellente journée à vous!
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
23 sept. 2013 à 12:15
23 sept. 2013 à 12:15
Bonjour,
un tuto très complet pour le VBA
https://bidou.developpez.com/article/VBA/
Mais ça ne se lit pas comme un roman policier, hélas!
:o)
un tuto très complet pour le VBA
https://bidou.developpez.com/article/VBA/
Mais ça ne se lit pas comme un roman policier, hélas!
:o)
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
23 sept. 2013 à 12:21
23 sept. 2013 à 12:21
Je te remercie, je vais essayer de me plonger dedans.
Malheureusement pour certains éléments je ne comprends pas toujours la différence en lisant la théorie. En revanche avec la pratique j'apprends plus.
Te remercie du liens.
Malheureusement pour certains éléments je ne comprends pas toujours la différence en lisant la théorie. En revanche avec la pratique j'apprends plus.
Te remercie du liens.