XL 2016 Numéros inversés

L

Lucko

Guest
Bonjour,

Je cherche une macro afin d'automatiser une inversion de numéros.

Au total: 24 numéros de 1 à 24.

Si sur la première ligne de 12 numéros je retrouve les numéros suivant:

1-3-5-8-9-10-15-16-17-19-20-22

Alors sur la deuxième ligne de 12 numéros, la macro devrai me donner les numéros manquants suivants:

2-4-6-7-11-12-13-14-18-21-23-24

Merci
 

Pièces jointes

  • Inversion de numéros.xlsx
    8.6 KB · Affichages: 30

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Lucko, bonsoir le forum,

Pas vraiment compris où se trouvait l'inversion mais essaie ce bout de code :

VB:
Sub Macro1()
Dim I As Byte 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

For I = 1 To 24 'boucle de 1 à 24
    Set R = Range("E8:P8").Find(I, , xlValues, xlWhole) 'définit la recherche R (recherche I dans la plage E8:P8)
    If R Is Nothing Then 'si aucune occurrence n'est trouvée
        'définit la cellule des destination DEST (E10 si E10 est vide, sinon, la première cellule vide de la plage E10:P10)
        Set DEST = IIf(Range("E10").Value = "", Range("E10"), Cells(10, 17).End(xlToLeft).Offset(0, 1))
        DEST.Value = I 'renvoie I dans DEST
    End If 'fin de la condition
Next I 'prochaine valeur de la boucle
End Sub
 
L

Lucko

Guest
Bonsoir Robert,

Merci ta macro fonctionne à merveille. Toutefois, lorsque j'appuie deux fois sur la macro le chiffre 1 apparaît en Q10 et le numéro 24 s'installe en deuxième position....!
 

Pièces jointes

  • Inversion1.xlsm
    14.5 KB · Affichages: 36

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Essaie de faire tourner la macro pas à pas et tu auras le réponse à ta question... Je te pose à mon tour la question suivante : pourquoi appuyer deux fois ?!...
Le code corrigé :

VB:
Sub Macro1()
Dim I As Byte 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

'si le nombre de valeurs dans la plage E10:P10 est égal à 12, sort de la procédure
If Application.WorksheetFunction.CountA(Range("E10:P10")) = 12 Then Exit Sub
For I = 1 To 24 'boucle de 1 à 24
    Set R = Range("E8:P8").Find(I, , xlValues, xlWhole) 'définit la recherche R (recherche I dans la plage E8:P8)
    If R Is Nothing Then 'si aucune occurrence n'est trouvée
        'définit la cellule des destination DEST (E10 si E10 est vide, sinon, la première cellule vide de la plage E10:P10)
        Set DEST = IIf(Range("E10").Value = "", Range("E10"), Cells(10, 17).End(xlToLeft).Offset(0, 1))
        DEST.Value = I 'renvoie I dans DEST
    End If 'fin de la condition
Next I 'prochaine valeur de la boucle
End Sub
 
L

Lucko

Guest
Oui, en effet, pourquoi? Je l'ignore. J'ai appuyé deux fois par inadvertance et le résultat était différent... J'ai cru à un bug. Maintenant, ça va. Merci beaucoup, cela fonctionne parfaitement.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir Lucko, Robert :), à tous,
Un autre essai:
VB:
Sub Macro1()
Dim tablo, dico, i
  tablo = Range("e8:p8")
  Set dico = CreateObject("scripting.dictionary")
  For i = 1 To 24: dico(i) = "": Next i
  For i = 1 To 12: dico.Remove tablo(1, i): Next i
  Range("e10").Resize(, 12) = dico.keys
End Sub
 

Discussions similaires

Réponses
13
Affichages
513
Réponses
46
Affichages
925

Statistiques des forums

Discussions
312 371
Messages
2 087 706
Membres
103 648
dernier inscrit
mehdi kaddaf