Répétition de valeurs ou suite de valeurs dans plusieurs cellules/colonnes

Bonjour au forum,

Étant novice dans le VBA, j'aurais besoin d'aide pour faciliter l'ajout de données automatiquement dans un tableau Excel.

Ne prêtez pas attention dans un premier temps aux différentes macros qui ne sont vraiment pas propres

Mes besoins seraient :

Colonne K "Mode de suppression" : la valeur des cellules de cette colonne doit toujours être égale à 5 si et seulement si la colonne J "Quantité" est non vide (afin d'éviter d'écrire la valeur 5 dans toutes les lignes de cette colonne).

Colonne L "Passage" : la valeur des cellules est toujours une succession 1,2,3,4 puis se répète (exemple : pour les lignes 2 à 5, les valeurs de la colonne L seront successivement 1,2,3,4. Pour les lignes 6 à 9, les valeurs de la colonne L seront successivement 1,2,3,4 → reprise de la boucle).

Colonne M "Avance" : la valeur des cellules de cette colonne doit toujours être égale à 20 si et seulement si la colonne J "Quantité" est non vide (afin d'éviter d'écrire la valeur 20 dans toutes les lignes de cette colonne).

Colonne N "Orientation 1" : la valeur des cellules est toujours une succession 0, 180, 90, 270 puis se répète (exemple : pour les lignes 2 à 5, les valeurs de la colonne L seront successivement 0, 180, 90, 270 . Pour les lignes 6 à 9, les valeurs de la colonne L seront successivement 0, 180, 90, 270 → reprise de la boucle).

J'ai écrit les valeurs à la main en exemple dans les premières lignes des colonnes concernées afin de faciliter la compréhension de mon besoin.

Merci beaucoup aux personnes qui prendront le temps de m'expliquer et de m'aider sur ce sujet.

Bonne journée à tous

Bonjour,

Pour les colonnes K et M une formule convient

=si("J1"<>"";"5";"")  pour la colonne K et  =Si("J1"<>"";"20";"") pour la colonne M

Pour les colonnes L et N, voici un petit bout de code

   For K = 1 To 200 Step 4    ' 200  ou autre 
        Range("L" & K) = 1
        Range("L" & K + 1) = 2
        Range("L" & K + 2) = 3
        Range("L" & K + 3) = 4
    Next K
même chose pour N en changeant les valeurs voulues

Bon courage

Bonsoir,
Jacky bonsoir,

pour continuer sur les formules en colonne N (et L si j'ai bien compris, bien que l'une peut être égale à l'autre...) à partir de la ligne 2 :
=CHOISIR(LIGNE()-(1*(ENT((LIGNE()-2)/4)*4+1));0;180;90;270)

La partie de formule suivante : LIGNE()-(1*(ENT((LIGNE()-2)/4)*4+1)) crée une suite de chiffre 1, 2, 3 et 4 répétitive en fonction des lignes de la feuille,
Puis CHOISIR permet de retourner une valeur en fonction des chiffres de cette suite : 1 retourne la première valeur de choisir = 0, 2 retourne la deuxième valeur de CHOISIR = 180 etc...

La colonne L : =N, donc pour L2 : =N2

Pour peu que votre plage de données peut être mise en tableau structuré les formules se recopieront automatiquement lors de l'ajout de nouvelle lignes.

@ bientôt

LouReeD

Bonjour Jacky, LouReeD,

Tout d'abord merci pour votre temps et votre aide sur le sujet et veuillez excuser la réponse tardive.

Jacky, votre code concernant les colonnes L et N fonctionne comme je m'y attendais à un petit détail prêt : K renvoi à un nombre de lignes finis (dans votre exemple 200 lignes) sans tenir compte du nombre de lignes existantes réellement dans le fichier.

Je m'explique : je peux aussi bien avoir 200, que 400 lignes de données et il faudrait que le sub puisse vérifier les lignes non vides pour écrire dans les colonnes L et N (ex : j'ai x lignes de données, j'aimerais que les valeurs dans les colonnes L et N se répètent sur x lignes → x étant variable).

Je vous joins bien évidemment le fichier Excel en exemple avec l'ajout du code comme vous l'avez spécifié Jacky.

Je ne peux utiliser de formules directement dans les cellules car je fais un import de données d'un autre fichier en amont, qui sont ensuite réorganisées dans les colonnes (ce qui risque d'écraser les données dans les cellules). De plus, j'ai un code pour nettoyer les données à chaque fois car le fichier sert à convertir des données importées d'autres fichiers.

Auriez vous un début de piste pour transformer cette formule que vous m'avez conseillé en code VBA ? :

=si("J1"<>"";"5";"") pour la colonne K et =Si("J1"<>"";"20";"") pour la colonne M

Merci beaucoup pour votre aide.

Orminan

Bonjour Orminan,

Pas de problèmes

1) pour la première question il suffit de remplacer 200 par der où der est calculé de la façon suiivante

Dim der, k As Integer
der = Cells(Rows.Count, 12).End(xlUp).Row  ' pour la colonne L
der = Cells(Rows.Count, 14).End(xlUp).Row   ' pour la colonne N
For k = 2 To der Step 4

2) pour l'autre, voici le petit bout de code, bon courage

Dim der, I As Integer
der = Cells(Rows.Count, 1).End(xlUp).Row
For I = 2 to der
If Range("J" & I) <> "" Then Range("K" & I) = "5": Range("M" & I) = "20" 
Next 

Re,

Une petiite remarque :
du fait que lorsqu'une ligne est créée, la première cellule est remplie, tu peux "soulager" ma proposition de code en précisant la valeur de "der" une seule fois pour toute

der = Cells(Rows.Cont, 1).End(xlUp).Row

Re bonjour Jacky,

Merci beaucoup pour ces éléments, cela m'aide beaucoup et tout fonctionne à merveille jusqu'à présent !

Il me reste encore pas mal de choses à faire dans ce fichier mais je vais avancer de mon côté et je reviendrais peut-être vers vous dans le futur.

Bonne continuation à vous et encore merci pour votre aide précieuse !

Orminan

Bonjour Orminan,

C'est sympa comme remerciements
Bon courage pour la suite

Je reste à ta disposition le cas échéant

Rechercher des sujets similaires à "repetition valeurs suite colonnes"