Propagation d'information
Xenos1705
Messages postés
93
Date d'inscription
Statut
Membre
Dernière intervention
-
Xenos1705 Messages postés 93 Date d'inscription Statut Membre Dernière intervention -
Xenos1705 Messages postés 93 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je vous explique mon pb:
J'ai une colonne A avec des infos provenant d'un autre fichier.
La colonne est composée comme suit:
A1: Pomme
A2:
A3:
A4: Poire
A5:
A6: Fraise
A7:
A8:
A9: Abricot
A10:
Maquestion est la suivante:
Comment, grâce à une macro, propager l'info qui se trouve au-dessus dans les lignes suivantes.
En résumé je souhaiterais que A2 et A3 = Pomme, que A5 = Poire, que A7 et A8 = Fraise et A10 = Abricot.
Petite subtilité: l'info A4 peut se trouver en A6 ou en A7 lors de la prochaine extraction de données. Dans la macro nous ne pouvons pas faire référence à A4 pour la poire par exemple, car "poire" pourrait se trouver en A10 lors de la prochaine extraction par exemple.
J'espère avoir été assez clair.
D'avance merci pour votre aide.
Xenos
Je vous explique mon pb:
J'ai une colonne A avec des infos provenant d'un autre fichier.
La colonne est composée comme suit:
A1: Pomme
A2:
A3:
A4: Poire
A5:
A6: Fraise
A7:
A8:
A9: Abricot
A10:
Maquestion est la suivante:
Comment, grâce à une macro, propager l'info qui se trouve au-dessus dans les lignes suivantes.
En résumé je souhaiterais que A2 et A3 = Pomme, que A5 = Poire, que A7 et A8 = Fraise et A10 = Abricot.
Petite subtilité: l'info A4 peut se trouver en A6 ou en A7 lors de la prochaine extraction de données. Dans la macro nous ne pouvons pas faire référence à A4 pour la poire par exemple, car "poire" pourrait se trouver en A10 lors de la prochaine extraction par exemple.
J'espère avoir été assez clair.
D'avance merci pour votre aide.
Xenos
A voir également:
- Propagation d'information
- Information d'identification réseau - Guide
- Information pc - Guide
- Hidden information marketplace c'est quoi ✓ - Forum HTML
- Lcfc debug page information - Forum BIOS
- L'en-tête du document comporte une information qui n’apparaît pas à l'impression car elle est de couleur blanche. de quelle information s'agit-il ? ✓ - Forum Word
3 réponses
Bonjour
Option Explicit
Cdlmnt
Option Explicit
Const co As Byte = 1
Const lideb As Byte = 2
Public Sub OK()
Dim li1 As Long, li2 As Long, lifin As Long, s As String
lifin = Cells(Rows.Count, co).End(xlUp).Row
li1 = lideb
Do
s = Cells(li1, co)
li2 = li1 + 1
While Cells(li2, co) = "" And li2 < lifin
Cells(li2, co) = s
li2 = li2 + 1
Wend
li1 = li2
Loop Until li1 >= lifin
Cells(li1 + 1, co) = Cells(li1, co)
End Sub
Cdlmnt
Bonjour Xenos1705,
Salutations ccm81,
Voici un code qui s’applique à plusieurs feuilles (Feuil1 et Feuil2) :
Intégrer le code au milieu d'une procédure déjà existante n'est pas forcément judicieux.
Tu peux laisser le code dans une procédure isolée et faire appel à cette procédure depuis ton programme principal. Cela pourra te permettre de discerner plus facilement les différents traitements.
A+
Salutations ccm81,
Voici un code qui s’applique à plusieurs feuilles (Feuil1 et Feuil2) :
Sub Test()
Dim Ws As Worksheet
Dim DerLig As Long
Dim Cel As Range, Memo As Range
For Each Ws In Worksheets
If Ws.Name = "Feuil1" Or Ws.Name = "Feuil2" Then
DerLig = Ws.Range("D" & Rows.Count).End(xlUp).Row
Set Memo = Ws.Range("A1")
For Each Cel In Ws.Range("A2:A" & DerLig)
If Cel = "" Then
Cel.Value = Memo.Value
Else
Set Memo = Cel
End If
Next Cel
End If
Next Ws
End Sub
Intégrer le code au milieu d'une procédure déjà existante n'est pas forcément judicieux.
Tu peux laisser le code dans une procédure isolée et faire appel à cette procédure depuis ton programme principal. Cela pourra te permettre de discerner plus facilement les différents traitements.
A+
Hello,
Merci pour le complément mais je voulais que le code ne s'applique qu'à un onglet donc c'est parfait.
Par contre t'aurais une idée de comment faire ce qui suit:
concernant la dernière information à propager, le code ne la recopie qu'une fois, je suppose pck il s'arrete à la première ligne vide... Serait-il possible que la macro propage la dernière info jusqu'à la ligne qui détient la dernière cellule renseignée en colonne D?
Merci
A+
Merci pour le complément mais je voulais que le code ne s'applique qu'à un onglet donc c'est parfait.
Par contre t'aurais une idée de comment faire ce qui suit:
concernant la dernière information à propager, le code ne la recopie qu'une fois, je suppose pck il s'arrete à la première ligne vide... Serait-il possible que la macro propage la dernière info jusqu'à la ligne qui détient la dernière cellule renseignée en colonne D?
Merci
A+
Telle qu'elle est conçue, la procédure effectue déjà la recopie jusqu'à la dernière ligne renseignée dans la colonne D.
J'ai modifié le code pour ne prendre en compte qu'une seule feuille (Feuil1).
A+
J'ai modifié le code pour ne prendre en compte qu'une seule feuille (Feuil1).
Sub Test()
Dim DerLig As Long
Dim Cel As Range, Memo As Range
With Worksheets("Feuil1")
DerLig = .Range("D" & Rows.Count).End(xlUp).Row
Set Memo = .Range("A1")
For Each Cel In .Range("A2:A" & DerLig)
If Cel = "" Then
Cel.Value = Memo.Value
Else
Set Memo = Cel
End If
Next Cel
End With
End Sub
A+
Re,
Finalement, j'ai encore deux question:
1) Comment adapter le code pour qu'il copie la formule renseignée plutôt que la valeur?
2) Comment faire pour que le code s'applique à plusieurs colonnes afin que toutes les colonnes qui possèdent des lignes vides soient renseigées. Les colonnes doivent copier les infos de sa propre colonne et non celle des autres.
J'espère avoir été assez clair.
Redites mois si jamais.
Merci
Finalement, j'ai encore deux question:
1) Comment adapter le code pour qu'il copie la formule renseignée plutôt que la valeur?
2) Comment faire pour que le code s'applique à plusieurs colonnes afin que toutes les colonnes qui possèdent des lignes vides soient renseigées. Les colonnes doivent copier les infos de sa propre colonne et non celle des autres.
J'espère avoir été assez clair.
Redites mois si jamais.
Merci
De quelle formule parles-tu ?
De quelles colonnes parles-tu ?
Tu dois comprendre que sans exemple concret, précis et complet, la résolution demande un don de divination que je n'ai pas.
Pour joindre un fichier, tu peux utiliser https://www.cjoint.com/
A+
De quelles colonnes parles-tu ?
Tu dois comprendre que sans exemple concret, précis et complet, la résolution demande un don de divination que je n'ai pas.
Pour joindre un fichier, tu peux utiliser https://www.cjoint.com/
A+
Pour une colonne supplémentaire, ce n’est pas très compliqué. Il suffit de relancer la procédure sur la deuxième colonne après avoir adapté les lignes de code :
Pour la formule, il faut savoir ce que contiennent réellement les cellules de la colonne concernée (formule, valeur ou rien).
S’il s’agit simplement de copier la formule à la place la valeur, tu peux utiliser
A+
Set Memo = .Range("B1")
For Each Cel In .Range("B2:B" & DerLig)
Pour la formule, il faut savoir ce que contiennent réellement les cellules de la colonne concernée (formule, valeur ou rien).
S’il s’agit simplement de copier la formule à la place la valeur, tu peux utiliser
Cel.Formula = Memo.Formula
A+
Hello,
Je venais à l'instant d'essayer:
Par exemple j'ai une formule en B2 "=DATEVAL(A2)" et faisant ce qui est décrit ci-dessus je me retrouve avec "=DATEVAL(A2)" sur toutes les lignes alors que je souhaiterais "=DATEVAL(A3)" sur la ligne B3, "=DATEVAL(A4)" sur la ligne B4 est ainsi de suite.
Etant donné que j'ai l'info en B2 et que le reste de la colonne est vide, il serait peut être plus simple de dire à la macro de copier la formule qui se trouve en B2 et de la propager jusqu'en B???.
B??? corespondrait à la dernière ligne renseignée en colonne G.
Qu'en penses-tu?
Merci
Je venais à l'instant d'essayer:
Cel.Formula = Memo.Formulamais le problème c'est qu'il copie exactement la formule et la propage telle quelle alors je me retrouve avec le même résultat sur toutes les lignes.
Par exemple j'ai une formule en B2 "=DATEVAL(A2)" et faisant ce qui est décrit ci-dessus je me retrouve avec "=DATEVAL(A2)" sur toutes les lignes alors que je souhaiterais "=DATEVAL(A3)" sur la ligne B3, "=DATEVAL(A4)" sur la ligne B4 est ainsi de suite.
Etant donné que j'ai l'info en B2 et que le reste de la colonne est vide, il serait peut être plus simple de dire à la macro de copier la formule qui se trouve en B2 et de la propager jusqu'en B???.
B??? corespondrait à la dernière ligne renseignée en colonne G.
Qu'en penses-tu?
Merci
Je viens de tester le code et il est presque parfait... bravo
En fait presque pck concernant la dernière information à propager, le code ne la recopie qu'une fois, je suppose pck il s'arrete à la première ligne vide... Serait-il possible que la macro propage la dernière info jusqu'à la ligne qui détient la dernière cellule renseignée en colonne D?
Ensuite, 2 questions:
1) est-ce que je peux intégrer ce code au milieu d'une macro déjà existente ou dois-je l'exécuter individuellement de ma macro principale? L'idée n'est d'avoir qu'une seule macro..
2) Est ce code s'applique à tous les onglets ou seulement sur celui qui est actif? D'après ce que j'ai testé il me semble que c'est uniquement l'onglet actif...
Finalement, pourrais-tu me donner quelques explications sur ton code pck ca paraît bien différent de ce que j'ai pu voir jusqu'à maintenant...
Encore merci et bon boulot
Xenos