Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Renvoi à la ligne suivant conditions

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cathodique

XLDnaute Barbatruc
Bonjour,

Le fichier joint comporte 3 feuilles (ALPHA, BETA et DELTA) pour lesquelles je voudrais effectuer des renvois à la ligne sur la dernière colonne.

Les données de ces 3 feuilles sont ainsi extraites d'une BD.

1- Le renvoi à la ligne doit s'effectue avant chaque lettre "I" qui est suivi de caractères et du signe "=" ,

car par exemple en M12, 2"I" se suivent celui de "BI" et de "I cfe=" (feuille "DELTA")

2- Ou bien le renvoi s'effectue juste après "mA".

En espérant avoir été clair, je vous remercie beaucoup.

Cordialement,
 

Pièces jointes

Re : Renvoi à la ligne suivant conditions

Bonjour cathodique,

Essayez cette macro :

Code:
Sub RetourLigne()
Dim tablo, i As Long, t As String
tablo = Range("M1:M2", Range("M" & Rows.Count))
For i = 1 To UBound(tablo)
  t = Application.Trim(tablo(i, 1)) 'SUPPRESPACE
  t = Replace(t, " I", vbLf & "I")
  t = Replace(t, "mA ", "mA" & vbLf)
  tablo(i, 1) = t
Next
[M1].Resize(UBound(tablo)) = tablo
End Sub
A+
 
Re : Renvoi à la ligne suivant conditions

Bonjour Job75,

Je te remercie pour ton code. Je l'ai testé pour la feuille "DELTA" dont la dernière colonne est "M". Il fonctionne parfaitement bien.

S'il te plait pourrais-tu m'indiquer comment faire pour que ce code exécute pour la dernière colonne et ce pour les 3 feuilles (ALPHA, BETA et DELTA).

Je te remercie beaucoup.

Cordialement,
 
Re : Renvoi à la ligne suivant conditions

Re,

Pour traiter les 3 feuilles :

Code:
Sub RetourLigne()
Dim f, c, i As Byte, tablo, j As Long, t As String
f = Array("ALPHA", "BETA", "DELTA") 'noms des feuilles
c = Array("D", "K", "M") 'colonnes à traiter
For i = 0 To UBound(f)
  With Sheets(f(i))
    tablo = .Range(.Cells(1, c(i)).Resize(2), .Cells(.Rows.Count, c(i)))
    For j = 1 To UBound(tablo)
      t = Application.Trim(tablo(j, 1)) 'SUPPRESPACE
      t = Replace(t, " I", vbLf & "I")
      tablo(j, 1) = Replace(t, "mA ", "mA" & vbLf)
    Next
    .Cells(1, c(i)).Resize(UBound(tablo)) = tablo
  End With
Next
End Sub
A+
 
Re : Renvoi à la ligne suivant conditions

Re,

J'essaie de comprendre ton code, j'ai saisi que tu as utilisé un tableau (array).

Je te demande de m'expliquer cette ligne de code
Code:
tablo = Range("M1:M2", Range("M" & Rows.Count))

Car dans mon fichier original en M1 et M2, j'ai des données faisant partie de l'entête de la feuille.

Je te remercie beaucoup.

Cordialement,
 
Re : Renvoi à la ligne suivant conditions

Re,

Ah mais pardon, aux posts #2 et #4 j'ai oublié le End(xlUp) :

Code:
Sub RetourLigne()
Dim f, c, i As Byte, tablo, j As Long, t As String
f = Array("ALPHA", "BETA", "DELTA") 'noms des feuilles
c = Array("D", "K", "M") 'colonnes à traiter
For i = 0 To UBound(f)
  With Sheets(f(i))
    tablo = .Range(.Cells(1, c(i)).Resize(2), .Cells(.Rows.Count, c(i)).End(xlUp))
    For j = 1 To UBound(tablo)
      t = Application.Trim(tablo(j, 1)) 'SUPPRESPACE
      t = Replace(t, " I", vbLf & "I")
      tablo(j, 1) = Replace(t, "mA ", "mA" & vbLf)
    Next
    .Cells(1, c(i)).Resize(UBound(tablo)) = tablo
  End With
Next
End Sub
La macro prenait beaucoup trop de temps alors qu'avec un tableau VBA c'est très rapide.

A+
 
Re : Renvoi à la ligne suivant conditions

Re,

Désolé, je pense que nos réponses se sont entre-croisées. Je n'avais pas rafraichi ma page internet, c'est pour cela que je n'ai pas vu tes réponses.

Je m'excuse mais je ne t'avais pas précisé que ces 3 feuilles sont obtenues en exécutant une macro (trop compliquée pour moi; pour qu'elle fonctionne il faut activer la bibliothèque Microsoft Scripting Runtime), pour les feuilles DELTA et BETA le nombre de colonnes est variable.

NB: ton code du post#6 fonctionne très bien, il ne manque que la gestion de la dernière colonne pour les feuilles BETA et DELTA car elles sont variables.

Merci beaucoup.

Cordialement,
 
Dernière édition:
Re : Renvoi à la ligne suivant conditions

Re,

Si les colonnes à traiter sont bien les dernières colonnes des 3 feuilles :

Code:
Sub RetourLigne()
Dim f, i As Byte, col%, tablo, j&, t$
f = Array("ALPHA", "BETA", "DELTA") 'noms des feuilles
For i = 0 To UBound(f)
  With Sheets(f(i))
    col = .Cells.Find("*", , xlValues, , xlByColumns, xlPrevious).Column
    tablo = .Range(.Cells(1, col).Resize(2), .Cells(.Rows.Count, col).End(xlUp))
    For j = 1 To UBound(tablo)
      t = Application.Trim(tablo(j, 1)) 'SUPPRESPACE
      t = Replace(t, " I", vbLf & "I")
      tablo(j, 1) = Replace(t, "mA ", "mA" & vbLf)
    Next
    .Cells(1, col).Resize(UBound(tablo)) = tablo
  End With
Next
End Sub
Fichier joint avec la macro dans Module1.

A+
 

Pièces jointes

[Résolu] : Renvoi à la ligne suivant conditions

Bonsoir Job75,

Que te dire? BRAVO! BRAVO! et encore BRAVO! C'est exactement ce que je cherchais à obtenir.

Mille mercis. Toute ma gratitude.

Bonne soirée.

Cordialement,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…