RechercheV VBA Boucle et Conditions

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":rolleyes: :)

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

  • Recherchev_Spe.zip
    13.5 KB · Affichages: 73
Dernière édition:

JNP

XLDnaute Barbatruc
Re : RechercheV VBA Boucle et Conditions

Bonjour le fil :),
Bon, ta manière de t'y prendre est un peu usine à gaz :rolleyes:...
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 :p...
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 :cool:
 

legenie

XLDnaute Nouveau
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 ;) !
 

legenie

XLDnaute Nouveau
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....:confused:

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

Pièces jointes

  • RECH.zip
    31.7 KB · Affichages: 52
  • RECH.zip
    31.7 KB · Affichages: 45
  • RECH.zip
    31.7 KB · Affichages: 50

JNP

XLDnaute Barbatruc
Re : RechercheV VBA Boucle et Conditions

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

Si...

XLDnaute Barbatruc
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
 

legenie

XLDnaute Nouveau
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

  • RECH2.zip
    33.6 KB · Affichages: 44
Dernière édition:

JNP

XLDnaute Barbatruc
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 :rolleyes:...
A + :cool:
 

legenie

XLDnaute Nouveau
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

  • RECH3.zip
    32.5 KB · Affichages: 51
Dernière édition:

JNP

XLDnaute Barbatruc
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 :p ?...
Code:
Sheets("Master").Cells(ARemplacer.Row, m).Value = Sheets("BDD").Cells(AChercher.Row, n).Value
Bonne suite :cool:
PS : mon code fonctionnait, mais juste pour une différence de colonne, pas une sur deux :mad:
 

Discussions similaires

Réponses
2
Affichages
172
Réponses
4
Affichages
231

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 763
dernier inscrit
p.michaux