Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Démultiplier des cellules dans Excel

8 réponses
Avatar
briatte
Bonjour,

J'ai une colonne de donn=E9es standard:

x
y
z
.=2E.

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 ?

8 réponses

Avatar
Trirème
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 ?



Avatar
cousinhub
trop fort, je penchais depuis un moment là-dessus....


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 ?





Avatar
dre
Bonjour,

Autre formule pour les valeurs (x, y, z) à partir de la ligne 1 :
=INDIRECT("A"&ENT((LIGNE()-1)/3)+1)&"/3"
formule en ligne 1 à copier vers le bas.

Le -1 correspond à la différence entre la ligne de départ de la formule et
celle des valeurs -1 (ici 1-1-1=-1)




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 ?




Avatar
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 respectivement 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

Avatar
f.briatte
On Aug 19, 8:20 am, Trirème wrote:

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


Bonjour, et merci beaucoup pour vos conseils.

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 ?

Fr.


Avatar
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.


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 champ '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 colonne
' Trirème Août 2007
Dim source As Variant ' Table où seront copiées les données sources

' ********** 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 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 colonne": 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élection 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 cellule 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

Avatar
f.briatte
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: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


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 !


Avatar
f.briatte
On 19 août, 14:37, wrote:
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 !


Pardon, je viens de corrger qq erreurs de moi-même. La formule est :

=OFFSET($A$2;INT((ROW()-ROW($B$2))/3),,,)