• Initiateur de la discussion Initiateur de la discussion Ber Nar
  • Date de début Date de début

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 !

B

Ber Nar

Guest
Bonjour à tous !

Voilà mon souci :

J'ai construit (il y a longtemps) une macro xl4 qui compare la 1ère colonne de 2 tables (triées par ordre croissant) et qui insère une ligne dans l'une des deux tables lorsque les 2 données comparées sont différentes.

J'aimerais pouvoir écrire cette macro en procédure VBA. quelqu'un peut-il m'aider ?

=ECRAN(FAUX)
=TANT.QUE(CELLULE.ACTIVE()<>"")
Debut=LIRE.CELLULE(5)
=SELECTIONNER("LC11")
=SI(CELLULE.ACTIVE()=Debut;ATTEINDRE(A7);SI(CELLULE.ACTIVE()>Debut;ATTEINDRE(A9);SI(CELLULE.ACTIVE()="";ATTEINDRE(A17);ATTEINDRE(A13))))
=SELECTIONNER("L(1)C1")
=ATTEINDRE(A3)
=SELECTIONNER("LC:LC17")
=INSERER(2)
=SELECTIONNER("L(1)C1")
=ATTEINDRE(A3)
=SELECTIONNER("LC1:LC10")
=INSERER(2)
=SELECTIONNER("L(1)C1")
=ATTEINDRE(A3)
=SUIVANT()
=RETOUR()

Par ailleurs, j'aimerais pouvoir indiquer au moyen d'une boite de dialogue, les coordonnées et longueurs des 2 tables.

Votre aide m'est précieuse.

Merci par avance.

Ber Nar.
 
Voilà qui devrait t'aider en tous les cas avec des nombres.


Sub test()
Set debtable1 = ThisWorkbook.Worksheets(1).Range("a1")
Set debtable2 = ThisWorkbook.Worksheets(1).Range("b1")

inc1 = 0
inc2 = 0
While debtable1.Offset(inc1, 0) <> ""
Set donnée1 = debtable1.Offset(inc1, 0)
Set donnée2 = debtable2.Offset(inc1, 0)
If donnée1 = donnée2 Then GoTo suite
If donnée1 = "" Then debtable1.Offset(inc1, 0) = debtable2.Offset(inc1, 0)
If donnée2 = "" Then debtable2.Offset(inc1, 0) = debtable1.Offset(inc1, 0)
If donnée2 < donnée1 Then
donnée1.Insert (xlShiftDown)
debtable1.Offset(inc1, 0) = debtable2.Offset(inc1, 0)
Else
donnée2.Insert (xlShiftDown)
debtable2.Offset(inc1, 0) = debtable1.Offset(inc1, 0)
End If

suite:
inc1 = inc1 + 1

Wend
 
'pour ceux que cela intéresse, j'ai eu quelques problèmes pour l'insertion, alors j'ai été obligé de manipuler les zones (areas) de l'objet rgTarget. Cela marche mais ce n'est pas trop beau.

cela suppose l'existence de deux plages nommées table1 & table2

Sub d()
Dim i As Integer
Dim cl
Dim rgTarget As Range
Application.ScreenUpdating = False

For Each cl In [table1].Columns(1).Cells
i = i + 1
If cl <> [table2].Columns(1).Cells.Item(i) Then
If Not rgTarget Is Nothing Then
Set rgTarget = Union(rgTarget, [table2].Columns(1).Cells.Item(i).EntireRow)
Else
Set rgTarget = [table2].Columns(1).Cells.Item(i).EntireRow
End If

End If
Next cl
rgTarget.Select
If Not rgTarget Is Nothing Then
For j = 1 To rgTarget.Areas.Count
For Each rw In rgTarget.Areas(j).Rows
x = x & rw.Address & IIf(j < rgTarget.Areas.Count, ",", "")
Next rw
Next j
End If

Range(x).Insert shift:=xlDown
End Sub
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour