Résolu Macro Excel : Selection d'une plage variable

Phenomenox

Nouveau membre
Bonjour à tous,

Je dois développer un tableur Excel pour le travail avec un rapport d'inventaire arrivant tous les matins, dont la taille et le contenu changent, que je dois trier par service.

Cependant j'en suis pour le moment réduit à copier/coller les plages sur une autre feuille ce qui n'est pas vraiment pratique.

Je souhaiterais définir une macro qui définisse les plages qui iraient d'un service à l'autre (dont le nom ne varie pas et qui occupent une ligne dans le tableau) mais je débute dans Excel et les quelques posts que j'ai pu lire me paraissent écrits en Chinois..

Je vous remercie par avance pour votre aide !
 

zeb

Modérateur
Plop,
Ben on va t'aider, alors.

Le plus facile, pour résoudre les gros problèmes, c'est de les découper en petits problèmes.
Puis de résoudre les petits problèmes.

Dis-nous en un peu plus sur ce que tu veux faire.
Mais pas tout d'un coup, et avec des exemples bien choisis.
Ensuite on te dira de faire la manip' à la main pour une ligne, avec l'enregistreur de macro allumé.
Tu nous publieras le code (en respectant le règlement) et on partira de là jusqu'à ce que tu que tu finisses par parler chinois couramment. :D
 

Phenomenox

Nouveau membre
Bonjour Zeb,

Tout d'abord merci pour la réactivité ! Ce que je souhaite c'est faire un état des stocks des différents services (Bar, Restaurant,...) selon un rapport général qui arrive tous les matins et qui varie bien évidemment.

Le rapport en question comporte 2 colonnes, une avec les noms des produits, leurs références et les noms des services concernés en en-tête, une avec les quantités.

Le petit soucis est donc que la première colonne comporte trois sortes d'informations.

Maintenant ce que je dois faire c'est trouver une macro pour définir des plages adaptables qui reconnaissent les noms des services et s'arrêtent entre chaque.

Si tu me donnes ton adresse mail je peux t'envoyer un exemple simplifié :)

Merci !
 

Phenomenox

Nouveau membre
Bonjour,
Je reviens vers vous avec un début de macro, malheureusement je dois avoir une erreur quelque part parce qu'elle ne se lance pas mais je crois que c'est l'idée :

XML:
Dim CRD() As String
    Sheets("MyMicrosDD").Activate
    If Cells.Find(What:="BAR PLAGE/0011") Then
    With Sheets("Feuil5")
    .Range(A3, C100).Select
    If Cells.Find(What:="Mini Bar") Then
    Sheets("Feuil5").EndSelect
    Selection.Copy
    Sheets("Feuil6").Activate
    Range(A2, C150).Paste

    End If
    
    End With
    
    End If

End Sub

Il me sort une erreur 13 (incompatibilité) à ligne "If Cells.Find(What:=BAR PLAGE).
Voila voila, je sais c'est pas fou mais je débute en VBA et c'est à peu près tout ce que j'ai pu sortir.

Merci pour votre aide.
 

zeb

Modérateur
Meilleure réponse
Plop,
Oh, désolé, je t'ai quelque peu abandonné :(

Alors tout d'abord, on ne va surtout pas activer de truc, ni sélectionner de machin, ni encore se servir du presse-papier comme variable temporaire.
Ensuite, VB est typé très fort. Entre un If et son Then, VB attend un booléen.
Or Find renvoie un Range.
Il y a donc incompatibilité de type.

Pour savoir si ta recherche est fructueuse, il faut vérifier si l'objet de type Range existe ou pas.

Code:
If Not Cells.Find(What:="BAR PLAGE/0011") Is Nothing Then
(Observe la double négation Not Nothing !)

Ca donne :
Code:
Dim CRD() As String
    If Not Worksheets("MyMicrosDD").Cells.Find(What:="BAR PLAGE/0011") And _
       Not Worksheets("Feuil5").Find(What:="Mini Bar") Is Nothing Then
        Worksheets("Feuil5").Range("A3;C100").Copy Destination:=Sheets("Feuil6").Range("A2;C150")
    End If
End Sub
(enfin, si j'ai bien compris que que tu voulais faire)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 058
Membres
1 586 285
Dernier membre
LeFront
Partager cette page
Haut