RechercheV VBA Boucle et 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 !

legenie

XLDnaute Nouveau
Bonjour le forum, ça fait zizir que même un 30 Décembre on ait plus de 300 xceliens dans le forum 🙂

Voila mon casse-tête :

J'ai 3 onglets : "Ref", "Master" et "BDD".

Je voudrai que la macro remplace le contenu de l'onglet "Master" par celui qu'elle trouvera dans "BDD" uniquement sur les refs listées dans "Ref"🙄 🙂

Les onglets "master" et "bdd" n'ont pas le même nb de lignes expressement. "bdd" en a plus.

Il n'y a pas de message d'erreur mais la macro ne respecte pas le cahier de charges : surement parce que le code est mal fait 😉

Pouvez-vous y jeter un coup d'oeil svp ?

Merci à vous et excellentes fêtes et sinon à l'année prochaine ! 😉

le code:

[highlight]
Code:
Sub RECH()
 
Application.ScreenUpdating = False

Set aw = ActiveWorkbook
Set ws = ThisWorkbook


   With ActiveWorkbook.Sheets("BDD")
      
        m = Sheets("BDD").Range("A65536").End(xlUp).Row 'On repère la dernière réf en colonne A en "BDD"
        n = Sheets("Master").Range("A65536").End(xlUp).Row 'On repère la dernière réf en colonne A en "Master"
        
        For i = 2 To m
            'On recherche uniquement les réfs de l'onglet "Ref" dans l'onglet "BDD" et on met  le résultat dans "c".
            Set c = ws.Sheets("Ref").Columns("A").Find(Sheets("BDD").Range("A" & i), LookIn:=xlValues, lookat:=xlWhole)
            
            If Not c Is Nothing Then 'Si la ref existe bien dans l'onglet "BDD"
                For j = 2 To n
                    'On recherche cette ref dans l'onglet "Master" et on met le résultat dans "x".
                    Set x = c.Find(Sheets("Master").Range("A" & j), LookIn:=xlValues, lookat:=xlWhole)
                                   
                    If Not x Is Nothing Then
                    For p = 2 To 7  '1ere colonne  à la 7eme colonne
                    'On remplace le contenu de l'onglet "Master" par celui de "BDD" sur les 7 colonnes de la ref trouvée
                    Sheets("Master").Cells(x.Row, p) = Sheets("BDD").Cells(c.Row, p)
                    Next p
                    End If
                Next j
            End If
 
        Next
    End With

End Sub
[/code]
 

Pièces jointes

Dernière édition:
Re : RechercheV VBA Boucle et Conditions

Bonjour le fil 🙂,
Bon, ta manière de t'y prendre est un peu usine à gaz 🙄...
Si j'ai bien compris, tu veux une mise à jour de la feuille Master depuis la BDD uniquement pour les références de la feuille Ref 😛...
Code:
Sub Test()
Dim Cellule As Range, AChercher As Range, ARemplacer  As Range
With Sheets("Ref")
For Each Cellule In .Range("A1:A" & .Range("A65536").End(xlUp).Row + 1)
Set AChercher = Sheets("BDD").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
Set ARemplacer = Sheets("Master").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
If Not AChercher Is Nothing And Not ARemplacer Is Nothing Then
AChercher.EntireRow.Copy ARemplacer.EntireRow
End If
Next Cellule
End With
End Sub
Bonne suite 😎
 
Re : RechercheV VBA Boucle et Conditions

Damne!!!!!!!!!

Vous êtes des géniiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiies ! J'ai presque les larmes aux yeux: ça fonctionne !!!!!

@ JNP toi il ne te faut même plus un point d'appui mais juste un pico-point ! 🙂

Merci et bonne année 😉 !
 
Re : RechercheV VBA Boucle et Conditions

Désolé...mais je pense avoir crié victoire trop top :

J'ai une erreur "l'indice n'appartient pas à la sélection" quand je boucle non plus sur des onglets mais sur 2 fichiers.

Le fichier qui lance la macro est "macro.xls" le repertoire est "IN".

Dossier ci-joint....😕

J'en suis confus.... (^_^)
 

Pièces jointes

Re : RechercheV VBA Boucle et Conditions

Re 🙂,
Une chose qui ne devrait JAMAIS figurer dans un code, c'est Active 😡... Tu ne sais jamais de qui il s'agit 🙄...
Code:
Set wa = ActiveWorkbook
figure AVANT l'ouverture de ton fichier 😱...
Code:
Do While fich <> ""
    Workbooks.Open (Chemin & "\IN\" & fich)
    Set wa = Workbooks(fich)
paraitrait plus logique 😛...
A quoi te sert d'utiliser wa et ws 🙄 ?
Code:
    ActiveWorkbook.Save
    ActiveWorkbook.Close True
Es-tu sûr de ce que tu sauvegardes et quitte 😡 ?
Bonne suite 😎
 
Re : RechercheV VBA Boucle et Conditions

Salut
et ainSI... ?
Code:
Sub RECH()
  Dim Ws As Workbook, Cellule As Range, AChercher As Range, ARemplacer   As Range
  Application.ScreenUpdating = False
  chemin = ThisWorkbook.Path
  Fich = Dir(chemin & "\IN\*.xls")
  Set Ws = ThisWorkbook
  Do While Fich <> ""
    Workbooks.Open (chemin & "\IN\" & Fich)
    With Ws.Sheets("Ref")
      For Each Cellule In .Range("A1:A" & .Range("A65536").End(xlUp).Row + 1)
        Set AChercher = Sheets("BDD").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
        If Not AChercher Is Nothing Then
          Set ARemplacer = Sheets("Master").Columns("A").Find(Cellule, LookIn:=xlValues, lookat:=xlWhole)
          If Not ARemplacer Is Nothing Then AChercher.EntireRow.Copy ARemplacer.EntireRow
        End If
      Next
      ActiveWorkbook.Save
      ActiveWorkbook.Close True
      Fich = Dir
    End With
  Loop
  Application.ScreenUpdating = True
End Sub
 
Re : RechercheV VBA Boucle et Conditions

Merci SI... Ca marche. Chapeau

SAUF QUE, en remplaçant la ligne :
Code:
AChercher.EntireRow.Copy ARemplacer.EntireRow
par

[highlight]
Code:
               h = 3
              For p = 6 To 11
                m = p
                n = (p - h) + 2
                Cells(ARemplacer.Row, m).Value = Cells(AChercher.Row, n).Value
                h = h - 1                            
              Next p
[/code]

Parce que :
- en "BDD" : Les colonne sont intercallées (1 à 1) et on ne put pas prendre toute la ligne mais qu'à partir de du 1er mois (Col N°= 5)
- en "Master" les colonnes se suivent et on ne copie pas non plus sur toute la ligne mais qu'à partir du 1er mois (Col N° 6) 🙂

J'ai pas d'erreur mais j'ai plus de résultat....

Merci pour votre aide sur ce casse tête.....
 

Pièces jointes

Dernière édition:
Re : RechercheV VBA Boucle et Conditions

Re 🙂,
Pas tout suivi, mais en gros
Code:
AChercher.Offset(0, 5).Resize(, 5).Copy ARemplacer.Offset(0, 4)
devrait le faire, en ajustant les décalages à ce que tu souhaites 🙄...
A + 😎
 
Re : RechercheV VBA Boucle et Conditions

Ok, je m'excuse j'ai pas été clair dès le début :

En fait voici la correspondance entre les colonnes :

Master: 6- 7- 8- 9- 10- 11
BDD : 5- 7- 9- 10- 11-12

" Sur la ligne "i", on récupère contenu de la colonne 5 (en BDD) que l'on insère en ligne "j" en colonne 6 (en Master) "
J'ai inséré ta ligne de code, ça ne marche pas. Une boucle est nécessaire je pense pour ne copier que les valeurs; Voici l'extratit du code avec ma boucle en commentaire :

Ton nouveau bout de code :

Code:
 If Not ARemplacer Is Nothing Then
              AChercher.Offset(0, 5).Resize(, 5).Copy ARemplacer.Offset(0, 4)
   End If

Ma boucle qui ne donne rien non plus:

Code:
 If Not ARemplacer Is Nothing Then

              h = 3
              For p = 6 To 11
                m = p
                n = (p - h) + 2
                Cells(ARemplacer.Row, m).Value = Cells(AChercher.Row, n).Value
                h = h - 1
                            
              Next p
   End If

Merci, fichier ci-joint
 

Pièces jointes

Dernière édition:
Re : RechercheV VBA Boucle et Conditions

Re 🙂,
Petit comique, ça ne te dérange pas de ne pas préciser les feuilles entre lesquelles tu veux faire ta copie 😛 ?...
Code:
Sheets("Master").Cells(ARemplacer.Row, m).Value = Sheets("BDD").Cells(AChercher.Row, n).Value
Bonne suite 😎
PS : mon code fonctionnait, mais juste pour une différence de colonne, pas une sur deux 😡
 
- 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

Discussions similaires

Réponses
2
Affichages
154
Réponses
4
Affichages
461
Retour