Boucle VBA pour remplacer valeur dans cellules

Bonjour à tous,

Je me permets de solliciter votre aide sur une macro.

Je travaille actuellement sur un fichier pour générer automatiquement une écriture comptable qui comporte des centaines de lignes (+500)

Mon fichier est composé de plusieurs onglets :

- d'un onglet « source » avec une partie où les utilisateurs doivent remplir les informations de leurs écritures et une partie des formules qui viennent vérifier les données indiquées. 1 ligne a donc toutes les informations pour l’écriture.

- de référentiels pour base de vérification des données de l’onglet « source »

- d’un onglet « écriture » qui récupère les informations renseignées dans l’onglet « source » pour créer lesdites écritures.

Mon fichier ne contient actuellement que des formules.

Pour résumer :

  • - 1 ligne de l’onglet « source » contient les informations pour une écriture
  • - 2 lignes de l’onglet « écriture » constituent l’écriture finale (en gros 1 ligne de l’onglet « source » est dispatcher sur 2 lignes dans l’onglet « écriture »)

Ma difficulté est :

Lorsque je saisi une formule sur la première ligne de l’onglet « écriture » , par exemple A1 : =SI('Source!A3="";"";'Source!Z3)

Si je tire ma formule sur la ligne du dessous (A2), la formule décale, ce qui est logique et donne : =SI('Source!A4="";"";'Source!Z4)

Sauf que dans mon cas, il faudrait qu’elle change de ligne toutes les 2 lignes (donc en A3, A5, A7, etc…) et pas toutes les lignes.

Vu la quantité de lignes à modifier quand je fais, ça risque d’être très long.

Pour essayer de faire cette modification en masse, j'ai créé 2 colonnes dans mon onglet "écriture". Colonne AG qui contient l'info à remplacer, colonne AH9; l'info à mettre à la place.

J’ai ensuite testé le code suivant :

Dim val1 As String, val2 As String
val1 = ActiveSheet.Range("AG9").Value
val2 = ActiveSheet.Range("AH9").Value
Range("A9:AF9").Select
Selection.Replace What:=val1, Replacement:=val2, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

La cellule AG9 contient le numéro de ligne source à modifier, par exemple 3 pour remplacer le 3 de la formule =SI('Source!A3="";"";'Source!Z3)

Et la cellule AH9 contient le nouveau numéro à prendre en compte (dans mon exemple ici 4).

A9:AF9 étant la zone du remplacement.

Ca fonctionne sur une ligne, ce qui donne après macro =SI('Source!A4="";"";'Source!Z4)

Le problème, c’est que même si j’étire la zone, les données seront toujours remplacées selon ce qu’il y a en AG9 et AH9 vu que c'est indiqué en dur.

J’aurais voulu savoir s’il était possible de faire une sorte de boucle, qu’une fois qu’il a remplacé entre A9:AF9 par la donnée de AH9, qu’il passe à A10:AF10 qui prendrait, cette fois, les infos de la cellule AH10 (où j'indique le numéro de ligne à prendre côté "source") et ainsi de suite.

Pensez-vous que c’est possible ?

Merci d’avance pour votre aide.

Cdt

Bonjour et bienvenue,

C'est difficile de te suivre sans fichier exemple, je n'ai peut-etre pas bien saisie la demande.
Je me suis concentré sur ton bout de code que tu souhaites boucler

J’ai ensuite testé le code suivant :

...

La cellule AG9 = 3 et la cellule AH9 = 4

A9:AF9 étant la zone du remplacement.

Ca fonctionne sur une ligne, ce qui donne après macro =SI('Source!A4="";"";'Source!Z4)

Tu peux tester ça :

Sub test()
Dim val1 As String, val2 As String
Dim i As Integer

For i = 9 To 15
'i boucle les lignes de 9 a 15 pour l'exemple

val1 = ActiveSheet.Range("AG" & i).Value
val2 = ActiveSheet.Range("AH" & i).Value
Range("A" & i & ":AF" & i).Select

Selection.Replace What:=val1, Replacement:=val2, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Next i
End Sub

For i = 9 to 15 (pour les lignes de 9 a 15)
A+

Super merci beaucoup ca a marché! Tu m'as fait gagné un temps précieux!

Rechercher des sujets similaires à "boucle vba remplacer valeur"