Association Recherche/Copier excel VBA
Résolu/Fermé
A voir également:
- Association Recherche/Copier excel VBA
- Liste déroulante excel - Guide
- Si et excel - Guide
- Copier une vidéo youtube - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Aller à la ligne excel - Guide
1 réponse
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 août 2010 à 19:02
3 août 2010 à 19:02
Re bonjour,
Je n'étais pas dispo cet aprem.
Pour en revenir à ton problème, c'est tout simplement 2 boucles imbriquées qu'il faut utiliser:
Cette méthode n'est surement pas la meilleure et pas la plus rapide mais elle fonctionne.
Je pense qu'en utilisant 2 collections (une pour chaque feuille) et en les comparant, l'exécution serait plus rapide.
;o)
Je n'étais pas dispo cet aprem.
Pour en revenir à ton problème, c'est tout simplement 2 boucles imbriquées qu'il faut utiliser:
'Déclaration des variables Dim wsMacro As Worksheet 'Objet worksheet pour la feuille "macro" Dim wsDonnee As Worksheet 'Objet worksheet pour la feuille "Données brutes" Dim DerLigMacro As Long Dim DerLigDonnee As Long Dim i As Long Dim j As Long Set wsMacro = Worksheets("macro") 'Instance de la feuille "macro" Set wsDonnee = Worksheets("Données brutes") 'Instance de la feuille "Données brutes" DerLigMacro = wsMacro.Range("IV1").End(xlToLeft).Column DerLigDonnee = wsDonnee.Range("IV1").End(xlToLeft).Column 'Pour chaque cellule de la feuille macro de la ligne 1 For i = 1 To DerLigMacro 'Pour chaque cellule de la feuille Données brutes de la ligne 1 For j = 1 To DerLigDonnee 'Si le contenu de la cellule wsMacro.Cells(1,i) = le contenu de la cellule wsDonnee.Cells(1,j) If wsMacro.Cells(1,i).Value = wsDonnee.Cells(1,j).Value Then 'Alors je copie le contenu de la ligne 2 de la feuille donnée vers la feuille macro wsMacro.Cells(2,i).Value = wsDonnee.Cells(2,j).Value End If Next j 'Incrémentation de j pour passer à la colonne suivante Next i 'Incrémentation de i pour passer à la colonne suivante 'Libération des objets et de la mémoire Set wsMacro = Nothing Set wsDonnee = Nothing
Cette méthode n'est surement pas la meilleure et pas la plus rapide mais elle fonctionne.
Je pense qu'en utilisant 2 collections (une pour chaque feuille) et en les comparant, l'exécution serait plus rapide.
;o)
4 août 2010 à 10:57
Encore une fois merci beaucoup ! j'y serais pas arrivé sinon.
Voilà donc mon code final :
Une petite question subsidiaire. Je pense avoir compris à quoi sert le End(xlToLeft) : j'imagine que c'est pour être sur de ne pas oublier de valeur si par exemple la ligne présente un "trou" et que les données reprennent la case d'après. On part donc de l'extrême droite de la feuille, et on trouvera bien la dernière valeur.
Si maintenant je veux faire le même raisonnement sur les colonnes, je dois écrire
?
Peux tu me corriger s'il te plait.
Encore merci.
4 août 2010 à 12:40
Bravo pour ta modification.
Pour ce qui concerne la recherche de la dernière ligne ou colonne renseignée, voilà un lien utile : https://excel.developpez.com/faq/index.php?page=Cellule#DerniereLigneNonVide.
Bon courage
;o)
4 août 2010 à 13:00
Je vais regarder le lien, à plus tard pour une autre session d'aide peut être :)