problème insoluble - macro teste et tableau croisé
4 réponses
gdubois
Bonjour =E0 tous,
Je lance un d=E9fi. A celui ou celle qui gagne j'offre soit un gros
bouquet de fleurs soit une caisse de Laurent Perrier (du champagne).
Voici le cas
J'ai cr=E9=E9 un macro qui :
- R=E9alise un test sur un des onglets de l'un des fichiers en
particulier
- Renvoi les valeurs qui r=E9pondent =E0 mon crit=E8re, les copie en
enlevant les blancs entre les lignes (de mani=E8re =E0 avoir une liste
continu), et les classe par ordre alphab=E9tique
- Et enfin cr=E9=E9 un tableau avec bordure de la longueur de la liste
et copie chaque ligne de la liste dans le tableau.
J'aimerais remplacer la formule entre '........................ par une
r=E9f=E9rence vers une cellule d'une de mes feuilles contenant la formule
en question. Le probl=E8me c'est que ActiveCell.FormulaR1C1 =3D _ ne veut
pas chercher ce qu'il y a =E0 l'int=E9rieur de la cellule et se contente
de ce qu'il y a entre "".
Autrement dit, si j'enl=E8ve
"=3DIF('[ADP PT-SH-str.xls]AVR'!R[-2]C[6]=3D""N"",'[ADP
PT-SH-str.xls]AVR'!R[-2]C[-2],"""")"
et que je le remplace par un truc du style "=3DB4", alors Excel ne veut
pas aller chercher la formule qui se trouve en B4. Il me prend soit le
r=E9sultat de la formule, soit juste =3DB4.
et =E7a me fais... pleurer. Oui je suis triste.
Voila le code de ma fonction multit=E2che dont je suis fier car j'ai
commenc=E9 visual basic avant hier. Au passage si vous avez des id=E9es
pour optimiser un peu tout =E7a...
Merci =E0 tous pour votre =E9ventuelle participation.
Bisou X
Sub DCR()
'Cr=E9ation d'une feuille de temporaire qui r=E9cup=E9rera les
donn=E9es pour les pr=E9formater
Sheets.Add
ActiveSheet.Name =3D "TEMP"
'Cr=E9ation d'une autre feuille (pour les tests)
Sheets.Add
ActiveSheet.Name =3D "test"
'Test des valeurs qui r=E9pondent =E0 la condition : DCR =3D N
Sheets("TEMP").Select
Range("A1").Select
'Filtrage des cellules vides
Range("A1").Select
Selection.AutoFilter Field:=3D1, Criteria1:=3D"<>"
'Copie des cellules non vide en une liste continue
Range("A1:A193").Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=3DxlValues, Operation:=3DxlNone,
SkipBlanks:=3D _
True, Transpose:=3DFalse
Range("B1:B193").Select
Selection.Sort Key1:=3DRange("B1"), Order1:=3DxlAscending,
Header:=3DxlGuess, _
OrderCustom:=3D1, MatchCase:=3DFalse, Orientation:=3DxlTopToBottom
'Comptage des valeurs renvoy=E9es par la copie
Range("C1").Select
ActiveCell.FormulaR1C1 =3D "=3DCOUNTA(RC[-1]:R[192]C[-1])"
'Insertion dans du nombre de lignes correspondantes au nombre de
valeurs renvoy=E9es
Dim nbLigne
Dim i
nbLigne =3D Range("C1").Value
For i =3D 1 To nbLigne
Sheets("test").Select
Range("A1:G1").Select
Selection.Insert Shift:=3DxlDown
Next
'Insertion des valeurs pour chaque ligne
i =3D 1
For i =3D 1 To nbLigne
Sheets("TEMP").Select
Range("B" & i).Select
Selection.Copy
Sheets("test").Select
Range("A" & i).Select
ActiveSheet.Paste
Next
'Formatage du tableau
Range("A1:G" & nbLigne).Select
Selection.Borders(xlDiagonalDown).LineStyle =3D xlNone
Selection.Borders(xlDiagonalUp).LineStyle =3D xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle =3D xlContinuous
.Weight =3D xlThin
.ColorIndex =3D xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle =3D xlContinuous
.Weight =3D xlThin
.ColorIndex =3D xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle =3D xlContinuous
.Weight =3D xlThin
.ColorIndex =3D xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle =3D xlContinuous
.Weight =3D xlThin
.ColorIndex =3D xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle =3D xlNone
Selection.Borders(xlInsideHorizontal).LineStyle =3D xlNone
Range("A1").Select
'Remise =E0 z=E9ro des param=E8tres
Application.ScreenUpdating =3D True
Application.DisplayAlerts =3D True
=20
Sheets("test").Select
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
pierref
Bonsoir,
Je ne comprends pas très bien ton problème. As-tu essayé d'utiliser ActiveCell.Formula = "=..." au lieu de ActiveCell.FormulaR1C1 = "=..." ?
Ca devrait marcher ou alors je n'ai rien compris :-)
Cdt
Pierre
Bonjour à tous,
Je lance un défi. A celui ou celle qui gagne j'offre soit un gros bouquet de fleurs soit une caisse de Laurent Perrier (du champagne).
Voici le cas
J'ai créé un macro qui : - Réalise un test sur un des onglets de l'un des fichiers en particulier - Renvoi les valeurs qui répondent à mon critère, les copie en enlevant les blancs entre les lignes (de manière à avoir une liste continu), et les classe par ordre alphabétique - Et enfin créé un tableau avec bordure de la longueur de la liste et copie chaque ligne de la liste dans le tableau.
J'aimerais remplacer la formule entre '........................ par une référence vers une cellule d'une de mes feuilles contenant la formule en question. Le problème c'est que ActiveCell.FormulaR1C1 = _ ne veut pas chercher ce qu'il y a à l'intérieur de la cellule et se contente de ce qu'il y a entre "".
Autrement dit, si j'enlève "=IF('[ADP PT-SH-str.xls]AVR'!R[-2]C[6]=""N"",'[ADP PT-SH-str.xls]AVR'!R[-2]C[-2],"""")"
et que je le remplace par un truc du style "´", alors Excel ne veut pas aller chercher la formule qui se trouve en B4. Il me prend soit le résultat de la formule, soit juste ´.
et ça me fais... pleurer. Oui je suis triste.
Voila le code de ma fonction multitâche dont je suis fier car j'ai commencé visual basic avant hier. Au passage si vous avez des idées pour optimiser un peu tout ça...
Merci à tous pour votre éventuelle participation.
Bisou X
Sub DCR() 'Création d'une feuille de temporaire qui récupérera les données pour les préformater Sheets.Add ActiveSheet.Name = "TEMP"
'Création d'une autre feuille (pour les tests) Sheets.Add ActiveSheet.Name = "test"
'Test des valeurs qui répondent à la condition : DCR = N Sheets("TEMP").Select Range("A1").Select
'Filtrage des cellules vides Range("A1").Select Selection.AutoFilter Field:=1, Criteria1:="<>"
'Copie des cellules non vide en une liste continue Range("A1:A193").Select Selection.Copy Range("B1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ True, Transpose:úlse Range("B1:B193").Select Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
'Comptage des valeurs renvoyées par la copie Range("C1").Select ActiveCell.FormulaR1C1 = "=COUNTA(RC[-1]:R[192]C[-1])"
'Insertion dans du nombre de lignes correspondantes au nombre de valeurs renvoyées Dim nbLigne Dim i nbLigne = Range("C1").Value For i = 1 To nbLigne Sheets("test").Select Range("A1:G1").Select Selection.Insert Shift:=xlDown Next
'Insertion des valeurs pour chaque ligne i = 1 For i = 1 To nbLigne Sheets("TEMP").Select Range("B" & i).Select Selection.Copy Sheets("test").Select Range("A" & i).Select ActiveSheet.Paste Next 'Formatage du tableau Range("A1:G" & nbLigne).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Range("A1").Select
'Remise à zéro des paramètres Application.ScreenUpdating = True Application.DisplayAlerts = True
Sheets("test").Select End Sub
Bonsoir,
Je ne comprends pas très bien ton problème.
As-tu essayé d'utiliser ActiveCell.Formula = "=..." au lieu de
ActiveCell.FormulaR1C1 = "=..." ?
Ca devrait marcher ou alors je n'ai rien compris :-)
Cdt
Pierre
Bonjour à tous,
Je lance un défi. A celui ou celle qui gagne j'offre soit un gros
bouquet de fleurs soit une caisse de Laurent Perrier (du champagne).
Voici le cas
J'ai créé un macro qui :
- Réalise un test sur un des onglets de l'un des fichiers en
particulier
- Renvoi les valeurs qui répondent à mon critère, les copie en
enlevant les blancs entre les lignes (de manière à avoir une liste
continu), et les classe par ordre alphabétique
- Et enfin créé un tableau avec bordure de la longueur de la liste
et copie chaque ligne de la liste dans le tableau.
J'aimerais remplacer la formule entre '........................ par une
référence vers une cellule d'une de mes feuilles contenant la formule
en question. Le problème c'est que ActiveCell.FormulaR1C1 = _ ne veut
pas chercher ce qu'il y a à l'intérieur de la cellule et se contente
de ce qu'il y a entre "".
Autrement dit, si j'enlève
"=IF('[ADP PT-SH-str.xls]AVR'!R[-2]C[6]=""N"",'[ADP
PT-SH-str.xls]AVR'!R[-2]C[-2],"""")"
et que je le remplace par un truc du style "´", alors Excel ne veut
pas aller chercher la formule qui se trouve en B4. Il me prend soit le
résultat de la formule, soit juste ´.
et ça me fais... pleurer. Oui je suis triste.
Voila le code de ma fonction multitâche dont je suis fier car j'ai
commencé visual basic avant hier. Au passage si vous avez des idées
pour optimiser un peu tout ça...
Merci à tous pour votre éventuelle participation.
Bisou X
Sub DCR()
'Création d'une feuille de temporaire qui récupérera les
données pour les préformater
Sheets.Add
ActiveSheet.Name = "TEMP"
'Création d'une autre feuille (pour les tests)
Sheets.Add
ActiveSheet.Name = "test"
'Test des valeurs qui répondent à la condition : DCR = N
Sheets("TEMP").Select
Range("A1").Select
'Filtrage des cellules vides
Range("A1").Select
Selection.AutoFilter Field:=1, Criteria1:="<>"
'Copie des cellules non vide en une liste continue
Range("A1:A193").Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _
True, Transpose:úlse
Range("B1:B193").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
'Comptage des valeurs renvoyées par la copie
Range("C1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(RC[-1]:R[192]C[-1])"
'Insertion dans du nombre de lignes correspondantes au nombre de
valeurs renvoyées
Dim nbLigne
Dim i
nbLigne = Range("C1").Value
For i = 1 To nbLigne
Sheets("test").Select
Range("A1:G1").Select
Selection.Insert Shift:=xlDown
Next
'Insertion des valeurs pour chaque ligne
i = 1
For i = 1 To nbLigne
Sheets("TEMP").Select
Range("B" & i).Select
Selection.Copy
Sheets("test").Select
Range("A" & i).Select
ActiveSheet.Paste
Next
'Formatage du tableau
Range("A1:G" & nbLigne).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A1").Select
'Remise à zéro des paramètres
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Je ne comprends pas très bien ton problème. As-tu essayé d'utiliser ActiveCell.Formula = "=..." au lieu de ActiveCell.FormulaR1C1 = "=..." ?
Ca devrait marcher ou alors je n'ai rien compris :-)
Cdt
Pierre
Bonjour à tous,
Je lance un défi. A celui ou celle qui gagne j'offre soit un gros bouquet de fleurs soit une caisse de Laurent Perrier (du champagne).
Voici le cas
J'ai créé un macro qui : - Réalise un test sur un des onglets de l'un des fichiers en particulier - Renvoi les valeurs qui répondent à mon critère, les copie en enlevant les blancs entre les lignes (de manière à avoir une liste continu), et les classe par ordre alphabétique - Et enfin créé un tableau avec bordure de la longueur de la liste et copie chaque ligne de la liste dans le tableau.
J'aimerais remplacer la formule entre '........................ par une référence vers une cellule d'une de mes feuilles contenant la formule en question. Le problème c'est que ActiveCell.FormulaR1C1 = _ ne veut pas chercher ce qu'il y a à l'intérieur de la cellule et se contente de ce qu'il y a entre "".
Autrement dit, si j'enlève "=IF('[ADP PT-SH-str.xls]AVR'!R[-2]C[6]=""N"",'[ADP PT-SH-str.xls]AVR'!R[-2]C[-2],"""")"
et que je le remplace par un truc du style "´", alors Excel ne veut pas aller chercher la formule qui se trouve en B4. Il me prend soit le résultat de la formule, soit juste ´.
et ça me fais... pleurer. Oui je suis triste.
Voila le code de ma fonction multitâche dont je suis fier car j'ai commencé visual basic avant hier. Au passage si vous avez des idées pour optimiser un peu tout ça...
Merci à tous pour votre éventuelle participation.
Bisou X
Sub DCR() 'Création d'une feuille de temporaire qui récupérera les données pour les préformater Sheets.Add ActiveSheet.Name = "TEMP"
'Création d'une autre feuille (pour les tests) Sheets.Add ActiveSheet.Name = "test"
'Test des valeurs qui répondent à la condition : DCR = N Sheets("TEMP").Select Range("A1").Select
'Filtrage des cellules vides Range("A1").Select Selection.AutoFilter Field:=1, Criteria1:="<>"
'Copie des cellules non vide en une liste continue Range("A1:A193").Select Selection.Copy Range("B1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ True, Transpose:úlse Range("B1:B193").Select Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
'Comptage des valeurs renvoyées par la copie Range("C1").Select ActiveCell.FormulaR1C1 = "=COUNTA(RC[-1]:R[192]C[-1])"
'Insertion dans du nombre de lignes correspondantes au nombre de valeurs renvoyées Dim nbLigne Dim i nbLigne = Range("C1").Value For i = 1 To nbLigne Sheets("test").Select Range("A1:G1").Select Selection.Insert Shift:=xlDown Next
'Insertion des valeurs pour chaque ligne i = 1 For i = 1 To nbLigne Sheets("TEMP").Select Range("B" & i).Select Selection.Copy Sheets("test").Select Range("A" & i).Select ActiveSheet.Paste Next 'Formatage du tableau Range("A1:G" & nbLigne).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Range("A1").Select
'Remise à zéro des paramètres Application.ScreenUpdating = True Application.DisplayAlerts = True
Sheets("test").Select End Sub
docm
bonjour. pierref a raison. Utilise la propriété FORMULA comme ceci par exemple: ActiveCell.Formula = Worksheets("avr").Range("B4").Formula
docm
wrote in message news: Bonjour à tous,
Je lance un défi. A celui ou celle qui gagne j'offre soit un gros bouquet de fleurs soit une caisse de Laurent Perrier (du champagne).
Voici le cas
J'ai créé un macro qui : - Réalise un test sur un des onglets de l'un des fichiers en particulier - Renvoi les valeurs qui répondent à mon critère, les copie en enlevant les blancs entre les lignes (de manière à avoir une liste continu), et les classe par ordre alphabétique - Et enfin créé un tableau avec bordure de la longueur de la liste et copie chaque ligne de la liste dans le tableau.
J'aimerais remplacer la formule entre '........................ par une référence vers une cellule d'une de mes feuilles contenant la formule en question. Le problème c'est que ActiveCell.FormulaR1C1 = _ ne veut pas chercher ce qu'il y a à l'intérieur de la cellule et se contente de ce qu'il y a entre "".
Autrement dit, si j'enlève "=IF('[ADP PT-SH-str.xls]AVR'!R[-2]C[6]=""N"",'[ADP PT-SH-str.xls]AVR'!R[-2]C[-2],"""")"
et que je le remplace par un truc du style "´", alors Excel ne veut pas aller chercher la formule qui se trouve en B4. Il me prend soit le résultat de la formule, soit juste ´.
et ça me fais... pleurer. Oui je suis triste.
Voila le code de ma fonction multitâche dont je suis fier car j'ai commencé visual basic avant hier. Au passage si vous avez des idées pour optimiser un peu tout ça...
Merci à tous pour votre éventuelle participation.
Bisou X
Sub DCR() 'Création d'une feuille de temporaire qui récupérera les données pour les préformater Sheets.Add ActiveSheet.Name = "TEMP"
'Création d'une autre feuille (pour les tests) Sheets.Add ActiveSheet.Name = "test"
'Test des valeurs qui répondent à la condition : DCR = N Sheets("TEMP").Select Range("A1").Select
'Filtrage des cellules vides Range("A1").Select Selection.AutoFilter Field:=1, Criteria1:="<>"
'Copie des cellules non vide en une liste continue Range("A1:A193").Select Selection.Copy Range("B1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ True, Transpose:úlse Range("B1:B193").Select Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
'Comptage des valeurs renvoyées par la copie Range("C1").Select ActiveCell.FormulaR1C1 = "=COUNTA(RC[-1]:R[192]C[-1])"
'Insertion dans du nombre de lignes correspondantes au nombre de valeurs renvoyées Dim nbLigne Dim i nbLigne = Range("C1").Value For i = 1 To nbLigne Sheets("test").Select Range("A1:G1").Select Selection.Insert Shift:=xlDown Next
'Insertion des valeurs pour chaque ligne i = 1 For i = 1 To nbLigne Sheets("TEMP").Select Range("B" & i).Select Selection.Copy Sheets("test").Select Range("A" & i).Select ActiveSheet.Paste Next 'Formatage du tableau Range("A1:G" & nbLigne).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Range("A1").Select
'Remise à zéro des paramètres Application.ScreenUpdating = True Application.DisplayAlerts = True
Sheets("test").Select End Sub
bonjour.
pierref a raison. Utilise la propriété FORMULA comme ceci par exemple:
ActiveCell.Formula = Worksheets("avr").Range("B4").Formula
docm
<gdubois@tema.rms.fr> wrote in message
news:1149778062.786381.311710@g10g2000cwb.googlegroups.com...
Bonjour à tous,
Je lance un défi. A celui ou celle qui gagne j'offre soit un gros
bouquet de fleurs soit une caisse de Laurent Perrier (du champagne).
Voici le cas
J'ai créé un macro qui :
- Réalise un test sur un des onglets de l'un des fichiers en
particulier
- Renvoi les valeurs qui répondent à mon critère, les copie en
enlevant les blancs entre les lignes (de manière à avoir une liste
continu), et les classe par ordre alphabétique
- Et enfin créé un tableau avec bordure de la longueur de la liste
et copie chaque ligne de la liste dans le tableau.
J'aimerais remplacer la formule entre '........................ par une
référence vers une cellule d'une de mes feuilles contenant la formule
en question. Le problème c'est que ActiveCell.FormulaR1C1 = _ ne veut
pas chercher ce qu'il y a à l'intérieur de la cellule et se contente
de ce qu'il y a entre "".
Autrement dit, si j'enlève
"=IF('[ADP PT-SH-str.xls]AVR'!R[-2]C[6]=""N"",'[ADP
PT-SH-str.xls]AVR'!R[-2]C[-2],"""")"
et que je le remplace par un truc du style "´", alors Excel ne veut
pas aller chercher la formule qui se trouve en B4. Il me prend soit le
résultat de la formule, soit juste ´.
et ça me fais... pleurer. Oui je suis triste.
Voila le code de ma fonction multitâche dont je suis fier car j'ai
commencé visual basic avant hier. Au passage si vous avez des idées
pour optimiser un peu tout ça...
Merci à tous pour votre éventuelle participation.
Bisou X
Sub DCR()
'Création d'une feuille de temporaire qui récupérera les
données pour les préformater
Sheets.Add
ActiveSheet.Name = "TEMP"
'Création d'une autre feuille (pour les tests)
Sheets.Add
ActiveSheet.Name = "test"
'Test des valeurs qui répondent à la condition : DCR = N
Sheets("TEMP").Select
Range("A1").Select
'Filtrage des cellules vides
Range("A1").Select
Selection.AutoFilter Field:=1, Criteria1:="<>"
'Copie des cellules non vide en une liste continue
Range("A1:A193").Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _
True, Transpose:úlse
Range("B1:B193").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
'Comptage des valeurs renvoyées par la copie
Range("C1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(RC[-1]:R[192]C[-1])"
'Insertion dans du nombre de lignes correspondantes au nombre de
valeurs renvoyées
Dim nbLigne
Dim i
nbLigne = Range("C1").Value
For i = 1 To nbLigne
Sheets("test").Select
Range("A1:G1").Select
Selection.Insert Shift:=xlDown
Next
'Insertion des valeurs pour chaque ligne
i = 1
For i = 1 To nbLigne
Sheets("TEMP").Select
Range("B" & i).Select
Selection.Copy
Sheets("test").Select
Range("A" & i).Select
ActiveSheet.Paste
Next
'Formatage du tableau
Range("A1:G" & nbLigne).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A1").Select
'Remise à zéro des paramètres
Application.ScreenUpdating = True
Application.DisplayAlerts = True
bonjour. pierref a raison. Utilise la propriété FORMULA comme ceci par exemple: ActiveCell.Formula = Worksheets("avr").Range("B4").Formula
docm
wrote in message news: Bonjour à tous,
Je lance un défi. A celui ou celle qui gagne j'offre soit un gros bouquet de fleurs soit une caisse de Laurent Perrier (du champagne).
Voici le cas
J'ai créé un macro qui : - Réalise un test sur un des onglets de l'un des fichiers en particulier - Renvoi les valeurs qui répondent à mon critère, les copie en enlevant les blancs entre les lignes (de manière à avoir une liste continu), et les classe par ordre alphabétique - Et enfin créé un tableau avec bordure de la longueur de la liste et copie chaque ligne de la liste dans le tableau.
J'aimerais remplacer la formule entre '........................ par une référence vers une cellule d'une de mes feuilles contenant la formule en question. Le problème c'est que ActiveCell.FormulaR1C1 = _ ne veut pas chercher ce qu'il y a à l'intérieur de la cellule et se contente de ce qu'il y a entre "".
Autrement dit, si j'enlève "=IF('[ADP PT-SH-str.xls]AVR'!R[-2]C[6]=""N"",'[ADP PT-SH-str.xls]AVR'!R[-2]C[-2],"""")"
et que je le remplace par un truc du style "´", alors Excel ne veut pas aller chercher la formule qui se trouve en B4. Il me prend soit le résultat de la formule, soit juste ´.
et ça me fais... pleurer. Oui je suis triste.
Voila le code de ma fonction multitâche dont je suis fier car j'ai commencé visual basic avant hier. Au passage si vous avez des idées pour optimiser un peu tout ça...
Merci à tous pour votre éventuelle participation.
Bisou X
Sub DCR() 'Création d'une feuille de temporaire qui récupérera les données pour les préformater Sheets.Add ActiveSheet.Name = "TEMP"
'Création d'une autre feuille (pour les tests) Sheets.Add ActiveSheet.Name = "test"
'Test des valeurs qui répondent à la condition : DCR = N Sheets("TEMP").Select Range("A1").Select
'Filtrage des cellules vides Range("A1").Select Selection.AutoFilter Field:=1, Criteria1:="<>"
'Copie des cellules non vide en une liste continue Range("A1:A193").Select Selection.Copy Range("B1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ True, Transpose:úlse Range("B1:B193").Select Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
'Comptage des valeurs renvoyées par la copie Range("C1").Select ActiveCell.FormulaR1C1 = "=COUNTA(RC[-1]:R[192]C[-1])"
'Insertion dans du nombre de lignes correspondantes au nombre de valeurs renvoyées Dim nbLigne Dim i nbLigne = Range("C1").Value For i = 1 To nbLigne Sheets("test").Select Range("A1:G1").Select Selection.Insert Shift:=xlDown Next
'Insertion des valeurs pour chaque ligne i = 1 For i = 1 To nbLigne Sheets("TEMP").Select Range("B" & i).Select Selection.Copy Sheets("test").Select Range("A" & i).Select ActiveSheet.Paste Next 'Formatage du tableau Range("A1:G" & nbLigne).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Range("A1").Select
'Remise à zéro des paramètres Application.ScreenUpdating = True Application.DisplayAlerts = True
Sheets("test").Select End Sub
J'ai-Du-Bois
Vous êtes les meilleurs!!
ça marche nikel et vous avez résolu tous mes problèmes...
merci beaucoup!!
J'ai-Du-bois eMail :
Vous êtes les meilleurs!!
ça marche nikel et vous avez résolu tous mes problèmes...
ça marche nikel et vous avez résolu tous mes problèmes...
merci beaucoup!!
J'ai-Du-bois eMail :
J'ai-Du-Bois
Pour résumer en gros ma situation...
Je pensais que ActiveCell.FormulaR1C1 était le seul moyen d'insérer une formule dans VBE. Le problème c'est que cela permet uniquement (apparement) de mettre une formule directement après les " " qui le suivent. En gros aucune référence à une formule se trouvant quelque part ailleurs n'est possible.
Et c'était là que ça n'allait pas pour moi car il me fallait absolument réaliser ce genre d'opération.
Maintenant, peut être que j'utilise mal ActiveCell.FormulaR1C1 mais toujrous est il qu'avec ActiveCell.Formula tout court cela marche au pas!!
Merci encore pour votre aide.
Pour résumer en gros ma situation...
Je pensais que ActiveCell.FormulaR1C1 était le seul moyen d'insérer
une formule dans VBE. Le problème c'est que cela permet uniquement
(apparement) de mettre une formule directement après les " " qui le
suivent. En gros aucune référence à une formule se trouvant quelque
part ailleurs n'est possible.
Et c'était là que ça n'allait pas pour moi car il me fallait
absolument réaliser ce genre d'opération.
Maintenant, peut être que j'utilise mal ActiveCell.FormulaR1C1 mais
toujrous est il qu'avec ActiveCell.Formula tout court cela marche au
pas!!
Je pensais que ActiveCell.FormulaR1C1 était le seul moyen d'insérer une formule dans VBE. Le problème c'est que cela permet uniquement (apparement) de mettre une formule directement après les " " qui le suivent. En gros aucune référence à une formule se trouvant quelque part ailleurs n'est possible.
Et c'était là que ça n'allait pas pour moi car il me fallait absolument réaliser ce genre d'opération.
Maintenant, peut être que j'utilise mal ActiveCell.FormulaR1C1 mais toujrous est il qu'avec ActiveCell.Formula tout court cela marche au pas!!