Bonjour,
J'ai une colonne de données standard:
x
y
z
...
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour,
J'ai une colonne de données standard:
x
y
z
...
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour,
J'ai une colonne de données standard:
x
y
z
...
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour inconnu,
Une solution par formule :
En supposant les données initiales en colonne A, dans la cellule où tu
veux commencer la nouvelle série tu écris
ÞCALER($A$1;ENT((LIGNE()-LIGNE($B$1))/3);;;)/3
et tu recopies vers le bas autant que nécessaire (3 x taille initiale
j'imagine).
Ensuite, si tu veux, tu peux conserver le résultat par un copie/collage
spécial sur elles-mêmes de ces cellules.
Si les données initiales ne sont pas en colonne A tu remplaceras le 'A'
dans la formule par la(es) lettres de ta colonne ÞCALER($A$1;ENT...
Tu remplaceras $B$1 par l'adresse de la cellule où tu commences cette
série en conservant les dollars. Donc si tu démarres en D7 tu écriras
ÞCALER($A$1;ENT((LIGNE()-LIGNE($D$7))/3);;;)/3
Cordialement,
TrirèmeBonjour,
J'ai une colonne de données standard:
x
y
z
...
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour inconnu,
Une solution par formule :
En supposant les données initiales en colonne A, dans la cellule où tu
veux commencer la nouvelle série tu écris
ÞCALER($A$1;ENT((LIGNE()-LIGNE($B$1))/3);;;)/3
et tu recopies vers le bas autant que nécessaire (3 x taille initiale
j'imagine).
Ensuite, si tu veux, tu peux conserver le résultat par un copie/collage
spécial sur elles-mêmes de ces cellules.
Si les données initiales ne sont pas en colonne A tu remplaceras le 'A'
dans la formule par la(es) lettres de ta colonne ÞCALER($A$1;ENT...
Tu remplaceras $B$1 par l'adresse de la cellule où tu commences cette
série en conservant les dollars. Donc si tu démarres en D7 tu écriras
ÞCALER($A$1;ENT((LIGNE()-LIGNE($D$7))/3);;;)/3
Cordialement,
Trirème
Bonjour,
J'ai une colonne de données standard:
x
y
z
...
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour inconnu,
Une solution par formule :
En supposant les données initiales en colonne A, dans la cellule où tu
veux commencer la nouvelle série tu écris
ÞCALER($A$1;ENT((LIGNE()-LIGNE($B$1))/3);;;)/3
et tu recopies vers le bas autant que nécessaire (3 x taille initiale
j'imagine).
Ensuite, si tu veux, tu peux conserver le résultat par un copie/collage
spécial sur elles-mêmes de ces cellules.
Si les données initiales ne sont pas en colonne A tu remplaceras le 'A'
dans la formule par la(es) lettres de ta colonne ÞCALER($A$1;ENT...
Tu remplaceras $B$1 par l'adresse de la cellule où tu commences cette
série en conservant les dollars. Donc si tu démarres en D7 tu écriras
ÞCALER($A$1;ENT((LIGNE()-LIGNE($D$7))/3);;;)/3
Cordialement,
TrirèmeBonjour,
J'ai une colonne de données standard:
x
y
z
...
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour,
J'ai une colonne de données standard:
x
y
z
....
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour,
J'ai une colonne de données standard:
x
y
z
....
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
Bonjour,
J'ai une colonne de données standard:
x
y
z
....
et j'aimerais la recoder dans une colonne comme cela:
x/3 (un tiers de x)
x/3
x/3
y/3
y/3
y/3
z/3
z/3
z/3
Comment fait-on SVP ?
trop fort, je penchais depuis un moment là-dessus....
trop fort, je penchais depuis un moment là-dessus....
trop fort, je penchais depuis un moment là-dessus....
trop fort, je penchais depuis un moment là-dessus....
Bof...
Pitite erreur.
Il vaut mieux faire :
ÞCALER(PremCellSource;ENT((LIGNE()-LIGNE(PremCellDest))/3);;;)/3
avec PremCellSource et PremCellDest à remplacer par la 1ère cellule r espectivement de la
plage source et de la plage destination estampillée des dollars d'usage . Il vaut donc
mieux nommer ces 2 cellules (Insertion, Nom, Définir).
Trirème
trop fort, je penchais depuis un moment là-dessus....
Bof...
Pitite erreur.
Il vaut mieux faire :
=DECALER(PremCellSource;ENT((LIGNE()-LIGNE(PremCellDest))/3);;;)/3
avec PremCellSource et PremCellDest à remplacer par la 1ère cellule r espectivement de la
plage source et de la plage destination estampillée des dollars d'usage . Il vaut donc
mieux nommer ces 2 cellules (Insertion, Nom, Définir).
Trirème
trop fort, je penchais depuis un moment là-dessus....
Bof...
Pitite erreur.
Il vaut mieux faire :
ÞCALER(PremCellSource;ENT((LIGNE()-LIGNE(PremCellDest))/3);;;)/3
avec PremCellSource et PremCellDest à remplacer par la 1ère cellule r espectivement de la
plage source et de la plage destination estampillée des dollars d'usage . Il vaut donc
mieux nommer ces 2 cellules (Insertion, Nom, Définir).
Trirème
J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste
{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose, ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste
{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose, ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste
{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose, ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
a écrit :> J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose, ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
Petite astuce pour sélectionner une grande plage, par exemple c2:c9500 : tu sélectionnes
C2 puis tu fais F5 ou CTRL+T ou pire : Édition, Atteindre. Dans le cham p 'Référence' de la
boite de dialogue 'Atteindre' tu saisis C9500 et avant de valider 'Entr ée' ou 'Ok' tu
appuies sur la touche 'majuscule'. Le résultat est la sélection C2:C9 500.
Maintenant que ta plage est sélectionnée, tu peux saisir la formule, le texte ou autre
chose et avant de valider 'Entrée' tu défonces la touche CTRL. La m ême formule (les
références sont ajustées), texte ou autre chose est copié dans to ute la plage.
Si tu es amené à faire cette démultiplication régulièrement, ex écute ce code VBA. Il faut
sélectionner la plage de données sources avant le lancement et êt re sûr que la colonne
destinatrice est vide. La démultiplication se fait dans la colonne de t on choix, à
préciser au début du code (Décalage) :
Sub Demultiplier()
' Sujet : Démultiplier des cellules dans Excel 18/08/207 17:31 GMT
' Démultiplie et divise des valeurs d'une colonne vers une autre colonne
' Trirème Août 2007
Dim source As Variant ' Table où seront copiées les données sourc es
' ********** initialisation constantes utilisateurs *************
Décalage = 1 ' 1 = 1 colonne à droite, -2 = 2 colonnes à g auche, 0 = sur place
Coeff = 3 ' Coeff >= 1. Coeff. de démultiplication. Surréal iste si Coeff=1.
ColMax = 256 ' Nb de colonnes max de la feuille à adapter selon la version d'Excel
LigneMax = 65536 ' Nb de lignes max de la feuille à adapter selon la version d'Excel
' **************************************************
ligne = 0
NbLigne = Selection.Rows.Count
' Quelques contrôles...
If Selection.Columns.Count > 1 Then MsgBox " Sélectionnez une seule col onne": Exit Sub
If Selection.Areas.Count > 1 Then MsgBox " Sélectionnez une seule zone" : Exit Sub
' Maintenant les données finales ne doivent pas sortir de la feuille
If Selection.Column + Décalage <= 0 Or _
Selection.Column + Décalage > ColMax Or _
Selection.Row + Coeff * NbLigne - 1 > LigneMax Then
MsgBox "Hors de la feuille"
Exit Sub
End If
If Décalage = 0 Then ' Avertir l'utilisateur d'un risque de perte de données
If MsgBox("La démultiplication se fera sur place en effaçant les données sources !" _
& Chr(10) & "(retour impossible)", vbOKCancel, "Alerte") = 2 Then Exit Sub
End If
' Aucun test sur l'écrasement des données d'autres colonnes
' Aucun test sur les valeurs numériques, texte, erreurs... de la séle ction initiale
Set Dest = Selection.Offset(0, Décalage).Resize(1, 1) ' Première cellule destinatrice
ReDim source(1 To NbLigne, 1) ' Ajustement taille de la table source
If Selection.Rows.Count = 1 Then ' Cas particulier d'une seule cellu le sélectionnée
source(1, 1) = Selection
Else
source = Selection
End If
For c = 1 To NbLigne ' Parcours ligne à ligne
For i = 0 To Coeff - 1 ' et démultiplications
Dest.Offset(ligne + i) = source(c, 1) / Coeff
Next
ligne = ligne + Coeff
Next
End Sub
Cordialement,
Trirème
f.bria...@googlemail.com a écrit :> J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste
{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose, ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
Petite astuce pour sélectionner une grande plage, par exemple c2:c9500 : tu sélectionnes
C2 puis tu fais F5 ou CTRL+T ou pire : Édition, Atteindre. Dans le cham p 'Référence' de la
boite de dialogue 'Atteindre' tu saisis C9500 et avant de valider 'Entr ée' ou 'Ok' tu
appuies sur la touche 'majuscule'. Le résultat est la sélection C2:C9 500.
Maintenant que ta plage est sélectionnée, tu peux saisir la formule, le texte ou autre
chose et avant de valider 'Entrée' tu défonces la touche CTRL. La m ême formule (les
références sont ajustées), texte ou autre chose est copié dans to ute la plage.
Si tu es amené à faire cette démultiplication régulièrement, ex écute ce code VBA. Il faut
sélectionner la plage de données sources avant le lancement et êt re sûr que la colonne
destinatrice est vide. La démultiplication se fait dans la colonne de t on choix, à
préciser au début du code (Décalage) :
Sub Demultiplier()
' Sujet : Démultiplier des cellules dans Excel 18/08/207 17:31 GMT
' Démultiplie et divise des valeurs d'une colonne vers une autre colonne
' Trirème Août 2007
Dim source As Variant ' Table où seront copiées les données sourc es
' ********** initialisation constantes utilisateurs *************
Décalage = 1 ' 1 = 1 colonne à droite, -2 = 2 colonnes à g auche, 0 = sur place
Coeff = 3 ' Coeff >= 1. Coeff. de démultiplication. Surréal iste si Coeff=1.
ColMax = 256 ' Nb de colonnes max de la feuille à adapter selon la version d'Excel
LigneMax = 65536 ' Nb de lignes max de la feuille à adapter selon la version d'Excel
' **************************************************
ligne = 0
NbLigne = Selection.Rows.Count
' Quelques contrôles...
If Selection.Columns.Count > 1 Then MsgBox " Sélectionnez une seule col onne": Exit Sub
If Selection.Areas.Count > 1 Then MsgBox " Sélectionnez une seule zone" : Exit Sub
' Maintenant les données finales ne doivent pas sortir de la feuille
If Selection.Column + Décalage <= 0 Or _
Selection.Column + Décalage > ColMax Or _
Selection.Row + Coeff * NbLigne - 1 > LigneMax Then
MsgBox "Hors de la feuille"
Exit Sub
End If
If Décalage = 0 Then ' Avertir l'utilisateur d'un risque de perte de données
If MsgBox("La démultiplication se fera sur place en effaçant les données sources !" _
& Chr(10) & "(retour impossible)", vbOKCancel, "Alerte") = 2 Then Exit Sub
End If
' Aucun test sur l'écrasement des données d'autres colonnes
' Aucun test sur les valeurs numériques, texte, erreurs... de la séle ction initiale
Set Dest = Selection.Offset(0, Décalage).Resize(1, 1) ' Première cellule destinatrice
ReDim source(1 To NbLigne, 1) ' Ajustement taille de la table source
If Selection.Rows.Count = 1 Then ' Cas particulier d'une seule cellu le sélectionnée
source(1, 1) = Selection
Else
source = Selection
End If
For c = 1 To NbLigne ' Parcours ligne à ligne
For i = 0 To Coeff - 1 ' et démultiplications
Dest.Offset(ligne + i) = source(c, 1) / Coeff
Next
ligne = ligne + Coeff
Next
End Sub
Cordialement,
Trirème
a écrit :> J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose, ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
Petite astuce pour sélectionner une grande plage, par exemple c2:c9500 : tu sélectionnes
C2 puis tu fais F5 ou CTRL+T ou pire : Édition, Atteindre. Dans le cham p 'Référence' de la
boite de dialogue 'Atteindre' tu saisis C9500 et avant de valider 'Entr ée' ou 'Ok' tu
appuies sur la touche 'majuscule'. Le résultat est la sélection C2:C9 500.
Maintenant que ta plage est sélectionnée, tu peux saisir la formule, le texte ou autre
chose et avant de valider 'Entrée' tu défonces la touche CTRL. La m ême formule (les
références sont ajustées), texte ou autre chose est copié dans to ute la plage.
Si tu es amené à faire cette démultiplication régulièrement, ex écute ce code VBA. Il faut
sélectionner la plage de données sources avant le lancement et êt re sûr que la colonne
destinatrice est vide. La démultiplication se fait dans la colonne de t on choix, à
préciser au début du code (Décalage) :
Sub Demultiplier()
' Sujet : Démultiplier des cellules dans Excel 18/08/207 17:31 GMT
' Démultiplie et divise des valeurs d'une colonne vers une autre colonne
' Trirème Août 2007
Dim source As Variant ' Table où seront copiées les données sourc es
' ********** initialisation constantes utilisateurs *************
Décalage = 1 ' 1 = 1 colonne à droite, -2 = 2 colonnes à g auche, 0 = sur place
Coeff = 3 ' Coeff >= 1. Coeff. de démultiplication. Surréal iste si Coeff=1.
ColMax = 256 ' Nb de colonnes max de la feuille à adapter selon la version d'Excel
LigneMax = 65536 ' Nb de lignes max de la feuille à adapter selon la version d'Excel
' **************************************************
ligne = 0
NbLigne = Selection.Rows.Count
' Quelques contrôles...
If Selection.Columns.Count > 1 Then MsgBox " Sélectionnez une seule col onne": Exit Sub
If Selection.Areas.Count > 1 Then MsgBox " Sélectionnez une seule zone" : Exit Sub
' Maintenant les données finales ne doivent pas sortir de la feuille
If Selection.Column + Décalage <= 0 Or _
Selection.Column + Décalage > ColMax Or _
Selection.Row + Coeff * NbLigne - 1 > LigneMax Then
MsgBox "Hors de la feuille"
Exit Sub
End If
If Décalage = 0 Then ' Avertir l'utilisateur d'un risque de perte de données
If MsgBox("La démultiplication se fera sur place en effaçant les données sources !" _
& Chr(10) & "(retour impossible)", vbOKCancel, "Alerte") = 2 Then Exit Sub
End If
' Aucun test sur l'écrasement des données d'autres colonnes
' Aucun test sur les valeurs numériques, texte, erreurs... de la séle ction initiale
Set Dest = Selection.Offset(0, Décalage).Resize(1, 1) ' Première cellule destinatrice
ReDim source(1 To NbLigne, 1) ' Ajustement taille de la table source
If Selection.Rows.Count = 1 Then ' Cas particulier d'une seule cellu le sélectionnée
source(1, 1) = Selection
Else
source = Selection
End If
For c = 1 To NbLigne ' Parcours ligne à ligne
For i = 0 To Coeff - 1 ' et démultiplications
Dest.Offset(ligne + i) = source(c, 1) / Coeff
Next
ligne = ligne + Coeff
Next
End Sub
Cordialement,
Trirème
On 19 août, 13:32, Trirème wrote:a écrit :> J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose , ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
Petite astuce pour sélectionner une grande plage, par exemple c2:c950 0 : tu sélectionnes
C2 puis tu fais F5 ou CTRL+T ou pire : Édition, Atteindre. Dans le ch amp 'Référence' de la
boite de dialogue 'Atteindre' tu saisis C9500 et avant de valider 'Entr ée' ou 'Ok' tu
appuies sur la touche 'majuscule'. Le résultat est la sélection C2: C9500.
Maintenant que ta plage est sélectionnée, tu peux saisir la formule , le texte ou autre
chose et avant de valider 'Entrée' tu défonces la touche CTRL. La m ême formule (les
références sont ajustées), texte ou autre chose est copié dans toute la plage.
Si tu es amené à faire cette démultiplication régulièrement, exécute ce code VBA. Il faut
sélectionner la plage de données sources avant le lancement et être sûr que la colonne
destinatrice est vide. La démultiplication se fait dans la colonne de ton choix, à
préciser au début du code (Décalage) :
Sub Demultiplier()
' Sujet : Démultiplier des cellules dans Excel 18/08/207 17:31 GMT
' Démultiplie et divise des valeurs d'une colonne vers une autre colo nne
' Trirème Août 2007
Dim source As Variant ' Table où seront copiées les données sou rces
' ********** initialisation constantes utilisateurs *************
Décalage = 1 ' 1 = 1 colonne à droite, -2 = 2 colonnes à gauche, 0 = sur place
Coeff = 3 ' Coeff >= 1. Coeff. de démultiplication. Surré aliste si Coeff=1.
ColMax = 256 ' Nb de colonnes max de la feuille à adapter selon la version d'Excel
LigneMax = 65536 ' Nb de lignes max de la feuille à adapter selo n la version d'Excel
' **************************************************
ligne = 0
NbLigne = Selection.Rows.Count
' Quelques contrôles...
If Selection.Columns.Count > 1 Then MsgBox " Sélectionnez une seule c olonne": Exit Sub
If Selection.Areas.Count > 1 Then MsgBox " Sélectionnez une seule zon e": Exit Sub
' Maintenant les données finales ne doivent pas sortir de la feuille
If Selection.Column + Décalage <= 0 Or _
Selection.Column + Décalage > ColMax Or _
Selection.Row + Coeff * NbLigne - 1 > LigneMax Then
MsgBox "Hors de la feuille"
Exit Sub
End If
If Décalage = 0 Then ' Avertir l'utilisateur d'un risque de perte d e données
If MsgBox("La démultiplication se fera sur place en effaçant l es données sources !" _
& Chr(10) & "(retour impossible)", vbOKCancel, "Alerte") = 2 The n Exit Sub
End If
' Aucun test sur l'écrasement des données d'autres colonnes
' Aucun test sur les valeurs numériques, texte, erreurs... de la sé lection initiale
Set Dest = Selection.Offset(0, Décalage).Resize(1, 1) ' Premièr e cellule destinatrice
ReDim source(1 To NbLigne, 1) ' Ajustement taille de la table source
If Selection.Rows.Count = 1 Then ' Cas particulier d'une seule cel lule sélectionnée
source(1, 1) = Selection
Else
source = Selection
End If
For c = 1 To NbLigne ' Parcours ligne à ligne
For i = 0 To Coeff - 1 ' et démultiplications
Dest.Offset(ligne + i) = source(c, 1) / Coeff
Next
ligne = ligne + Coeff
Next
End Sub
Cordialement,
Trirème
Re-bonjour Trirème,
J'ai noté vos explications. Pour le moment, j'essaie la méthode
"formule" (pas VBA).
Hélas, je n'y arrive pas. J'ai essayé ce code :
=OFFSET(A2;INT((ROW()-ROW($B$2))/3);;;)/3
... mais ça me dit que l'erreur est au début, au niveau de A2. Où se
situe l'erreur ?
Un fichier de test (démultiplication par 3, sans la division pour
simplifier) est là :http://phnk.com/test-offset.xls
(Pour les curieux, la démultiplication porte sur un millier de lignes
et ce n'est pas 3 mais 8 dans mon vrai fichier -- je cherche à
obtenir, en colonnes, xxxxxxxxyyyyyyyyzzzz... à partir de xyz...).
Merci encore !
On 19 août, 13:32, Trirème <No...@EvryOuer.fr> wrote:
f.bria...@googlemail.com a écrit :> J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste
{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose , ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
Petite astuce pour sélectionner une grande plage, par exemple c2:c950 0 : tu sélectionnes
C2 puis tu fais F5 ou CTRL+T ou pire : Édition, Atteindre. Dans le ch amp 'Référence' de la
boite de dialogue 'Atteindre' tu saisis C9500 et avant de valider 'Entr ée' ou 'Ok' tu
appuies sur la touche 'majuscule'. Le résultat est la sélection C2: C9500.
Maintenant que ta plage est sélectionnée, tu peux saisir la formule , le texte ou autre
chose et avant de valider 'Entrée' tu défonces la touche CTRL. La m ême formule (les
références sont ajustées), texte ou autre chose est copié dans toute la plage.
Si tu es amené à faire cette démultiplication régulièrement, exécute ce code VBA. Il faut
sélectionner la plage de données sources avant le lancement et être sûr que la colonne
destinatrice est vide. La démultiplication se fait dans la colonne de ton choix, à
préciser au début du code (Décalage) :
Sub Demultiplier()
' Sujet : Démultiplier des cellules dans Excel 18/08/207 17:31 GMT
' Démultiplie et divise des valeurs d'une colonne vers une autre colo nne
' Trirème Août 2007
Dim source As Variant ' Table où seront copiées les données sou rces
' ********** initialisation constantes utilisateurs *************
Décalage = 1 ' 1 = 1 colonne à droite, -2 = 2 colonnes à gauche, 0 = sur place
Coeff = 3 ' Coeff >= 1. Coeff. de démultiplication. Surré aliste si Coeff=1.
ColMax = 256 ' Nb de colonnes max de la feuille à adapter selon la version d'Excel
LigneMax = 65536 ' Nb de lignes max de la feuille à adapter selo n la version d'Excel
' **************************************************
ligne = 0
NbLigne = Selection.Rows.Count
' Quelques contrôles...
If Selection.Columns.Count > 1 Then MsgBox " Sélectionnez une seule c olonne": Exit Sub
If Selection.Areas.Count > 1 Then MsgBox " Sélectionnez une seule zon e": Exit Sub
' Maintenant les données finales ne doivent pas sortir de la feuille
If Selection.Column + Décalage <= 0 Or _
Selection.Column + Décalage > ColMax Or _
Selection.Row + Coeff * NbLigne - 1 > LigneMax Then
MsgBox "Hors de la feuille"
Exit Sub
End If
If Décalage = 0 Then ' Avertir l'utilisateur d'un risque de perte d e données
If MsgBox("La démultiplication se fera sur place en effaçant l es données sources !" _
& Chr(10) & "(retour impossible)", vbOKCancel, "Alerte") = 2 The n Exit Sub
End If
' Aucun test sur l'écrasement des données d'autres colonnes
' Aucun test sur les valeurs numériques, texte, erreurs... de la sé lection initiale
Set Dest = Selection.Offset(0, Décalage).Resize(1, 1) ' Premièr e cellule destinatrice
ReDim source(1 To NbLigne, 1) ' Ajustement taille de la table source
If Selection.Rows.Count = 1 Then ' Cas particulier d'une seule cel lule sélectionnée
source(1, 1) = Selection
Else
source = Selection
End If
For c = 1 To NbLigne ' Parcours ligne à ligne
For i = 0 To Coeff - 1 ' et démultiplications
Dest.Offset(ligne + i) = source(c, 1) / Coeff
Next
ligne = ligne + Coeff
Next
End Sub
Cordialement,
Trirème
Re-bonjour Trirème,
J'ai noté vos explications. Pour le moment, j'essaie la méthode
"formule" (pas VBA).
Hélas, je n'y arrive pas. J'ai essayé ce code :
=OFFSET(A2;INT((ROW()-ROW($B$2))/3);;;)/3
... mais ça me dit que l'erreur est au début, au niveau de A2. Où se
situe l'erreur ?
Un fichier de test (démultiplication par 3, sans la division pour
simplifier) est là :http://phnk.com/test-offset.xls
(Pour les curieux, la démultiplication porte sur un millier de lignes
et ce n'est pas 3 mais 8 dans mon vrai fichier -- je cherche à
obtenir, en colonnes, xxxxxxxxyyyyyyyyzzzz... à partir de xyz...).
Merci encore !
On 19 août, 13:32, Trirème wrote:a écrit :> J'aurais dû signaler que, dans ma colonne de départ, je n'ai pas juste{x y z} mais environ... 9000 entrées, x1... x9000.
Je cherche donc une méthode automatisée, de type macro je suppose , ou
qqch dans ce style. Je vais essayer la méthode donnée ici, avec
OFFSET / DECALER, mais cela va-t-il fonctionner avec autant de
lignes ?
Oui, du moment que tu ne dépasses pas la taille max de la feuille.
Petite astuce pour sélectionner une grande plage, par exemple c2:c950 0 : tu sélectionnes
C2 puis tu fais F5 ou CTRL+T ou pire : Édition, Atteindre. Dans le ch amp 'Référence' de la
boite de dialogue 'Atteindre' tu saisis C9500 et avant de valider 'Entr ée' ou 'Ok' tu
appuies sur la touche 'majuscule'. Le résultat est la sélection C2: C9500.
Maintenant que ta plage est sélectionnée, tu peux saisir la formule , le texte ou autre
chose et avant de valider 'Entrée' tu défonces la touche CTRL. La m ême formule (les
références sont ajustées), texte ou autre chose est copié dans toute la plage.
Si tu es amené à faire cette démultiplication régulièrement, exécute ce code VBA. Il faut
sélectionner la plage de données sources avant le lancement et être sûr que la colonne
destinatrice est vide. La démultiplication se fait dans la colonne de ton choix, à
préciser au début du code (Décalage) :
Sub Demultiplier()
' Sujet : Démultiplier des cellules dans Excel 18/08/207 17:31 GMT
' Démultiplie et divise des valeurs d'une colonne vers une autre colo nne
' Trirème Août 2007
Dim source As Variant ' Table où seront copiées les données sou rces
' ********** initialisation constantes utilisateurs *************
Décalage = 1 ' 1 = 1 colonne à droite, -2 = 2 colonnes à gauche, 0 = sur place
Coeff = 3 ' Coeff >= 1. Coeff. de démultiplication. Surré aliste si Coeff=1.
ColMax = 256 ' Nb de colonnes max de la feuille à adapter selon la version d'Excel
LigneMax = 65536 ' Nb de lignes max de la feuille à adapter selo n la version d'Excel
' **************************************************
ligne = 0
NbLigne = Selection.Rows.Count
' Quelques contrôles...
If Selection.Columns.Count > 1 Then MsgBox " Sélectionnez une seule c olonne": Exit Sub
If Selection.Areas.Count > 1 Then MsgBox " Sélectionnez une seule zon e": Exit Sub
' Maintenant les données finales ne doivent pas sortir de la feuille
If Selection.Column + Décalage <= 0 Or _
Selection.Column + Décalage > ColMax Or _
Selection.Row + Coeff * NbLigne - 1 > LigneMax Then
MsgBox "Hors de la feuille"
Exit Sub
End If
If Décalage = 0 Then ' Avertir l'utilisateur d'un risque de perte d e données
If MsgBox("La démultiplication se fera sur place en effaçant l es données sources !" _
& Chr(10) & "(retour impossible)", vbOKCancel, "Alerte") = 2 The n Exit Sub
End If
' Aucun test sur l'écrasement des données d'autres colonnes
' Aucun test sur les valeurs numériques, texte, erreurs... de la sé lection initiale
Set Dest = Selection.Offset(0, Décalage).Resize(1, 1) ' Premièr e cellule destinatrice
ReDim source(1 To NbLigne, 1) ' Ajustement taille de la table source
If Selection.Rows.Count = 1 Then ' Cas particulier d'une seule cel lule sélectionnée
source(1, 1) = Selection
Else
source = Selection
End If
For c = 1 To NbLigne ' Parcours ligne à ligne
For i = 0 To Coeff - 1 ' et démultiplications
Dest.Offset(ligne + i) = source(c, 1) / Coeff
Next
ligne = ligne + Coeff
Next
End Sub
Cordialement,
Trirème
Re-bonjour Trirème,
J'ai noté vos explications. Pour le moment, j'essaie la méthode
"formule" (pas VBA).
Hélas, je n'y arrive pas. J'ai essayé ce code :
=OFFSET(A2;INT((ROW()-ROW($B$2))/3);;;)/3
... mais ça me dit que l'erreur est au début, au niveau de A2. Où se
situe l'erreur ?
Un fichier de test (démultiplication par 3, sans la division pour
simplifier) est là :http://phnk.com/test-offset.xls
(Pour les curieux, la démultiplication porte sur un millier de lignes
et ce n'est pas 3 mais 8 dans mon vrai fichier -- je cherche à
obtenir, en colonnes, xxxxxxxxyyyyyyyyzzzz... à partir de xyz...).
Merci encore !